Common used code in Keras
Project description
simplified keras
Common used actions in keras
Table of contents
General info
This package is a set of common used actions in keras. At this moment includes:
- Main package
- Plots
- Metrics
- Transformations
Libraries
- Keras - version 2.4.3
- Matplotlib - version 3.3.3
- NumPy - version 1.19.4
- Tensorflow - version 2.4.0rc1
- Pandas - version 1.1.5
- Seaborn - version 0.11.1
Setup
- Install from PyPi:
pip install simplified-keras
Documentation
Main package
Generators
train_val_generators
from keras.preprocessing.image import ImageDataGenerator
from simplified_keras.generators import get_train_val_generators
img_size = (48, 48)
img_datagen = ImageDataGenerator(rescale=1/255)
#same for get_val_test_generators
train_generator, validation_generator = get_train_val_generators(img_datagen, data_dir='../data/normal',
color_mode='grayscale', target_size=img_size)
numpy_memmap_generator
from simplified_keras.generators import numpy_memmap_generator
train_gen = numpy_memmap_generator('imgs.npy', 'labels.npy', batch_size=64, shuffle_array=False)
Default callbacks
from simplified_keras.default_callbacks import get_default_callbacks
callbacks = get_default_callbacks('models/vgg16_calssifier.h5', monitor='val_loss', verbose=0)
hist = model.fit(train_generator, steps_per_epoch=train_steps, validation_data=validation_generator,
validation_steps=valid_steps, epochs=100, callbacks=callbacks, verbose=2)
Signature:
def get_default_callbacks(model_path, monitor='val_acc', base_patience=3, lr_reduce_factor=0.5, min_lr=1e-7, verbose=1):
return [
clb.ReduceLROnPlateau(monitor=monitor, factor=lr_reduce_factor, min_lr=min_lr, patience=base_patience, verbose=verbose),
clb.EarlyStopping(monitor=monitor, patience=(2 * base_patience + 1), verbose=verbose),
clb.ModelCheckpoint(monitor=monitor, filepath=model_path, save_best_only=True, verbose=verbose)
]
Plots
Accuracy and Loss plot
from simplified_keras.plots.history_plots import plot_acc_and_loss
history = model.fit(train_gen, teps_per_epoch=train_steps, epochs=5, validation_data=val_gen,
validation_steps=val_steps, callbacks=callbacks)
fig = plot_acc_and_loss(history)
Result:
Predictions with image plot
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
from simplified_keras.generators import get_train_val_generators
from simplified_keras.plots import plot_predictions_with_img
img_size = (48, 48)
img_datagen = ImageDataGenerator(rescale=1 / 255)
_, validation_generator = get_train_val_generators(img_datagen, data_dir='../data/normal',
color_mode='grayscale', target_size=img_size)
model = load_model('../models/standard_model.h5')
batch, labels = validation_generator.next()
preds = model.predict(batch)
named_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
fig = plot_predictions_with_img(1, preds, labels, batch, named_labels, grayscale=True)
Result:
Histogram with CDF and image plot
import cv2
from simplified_keras.plots import plot_gray_img_with_histogram
img = cv2.imread(f'{src_train_path}/0/241.png', 0)
fig1 = plot_gray_img_with_histogram(img)
img2 = stretch_histogram(img)
fig2 = plot_gray_img_with_histogram(img2)
Result:
Confusion matrix plot
from simplified_keras.transformations import predictions_to_classes, one_hot_to_sparse
from simplified_keras.metrics import get_confusion_matrixes
from simplified_keras.plots import plot_confusion_matrix
predictions = model.predict(validation_images)
predicted_classes = predictions_to_classes(predictions)
sparse_labels = one_hot_to_sparse(validation_labels)
cm, cm_normalized = get_confusion_matrixes(predicted_classes, sparse_labels)
classes = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
f1 = plot_confusion_matrix(cm, classes)
f2 = plot_confusion_matrix(cm_normalized, classes, figsize=(10, 8))
Results:
Metrics
Confusion matrix
from simplified_keras.transformations import predictions_to_classes, one_hot_to_sparse
from simplified_keras.metrics import get_confusion_matrixes
predictions = model.predict(validation_images)
predicted_classes = predictions_to_classes(predictions)
sparse_labels = one_hot_to_sparse(validation_labels)
# Returns two numpy arrays: standard and normalized
cm, cm_normalized = get_confusion_matrixes(predicted_classes, sparse_labels)
Model Statistics
Calculates:
- FP
- FN
- TP
- TN
- TPR # Sensitivity/true positive rate
- TNR # Specificity/true negative rate
- PPV # Precision/positive predictive value
- NPV # Negative predictive value
- FPR # Fall out or false positive rate
- FNR # False negative rate
- FDR # False discovery rate
- ACC # Overall accuracy for each class
from simplified_keras.transformations import predictions_to_classes, one_hot_to_sparse
from simplified_keras.metrics import get_confusion_matrixes
from simplified_keras.metrics import get_model_statistics
predictions = model.predict(validation_images)
predicted_classes = predictions_to_classes(predictions)
sparse_labels = one_hot_to_sparse(validation_labels)
cm, cm_normalized = get_confusion_matrixes(predicted_classes, sparse_labels)
stats = get_model_statistics(cm)
classes = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
fig = stats.visualize(classes)
print(stats.TN) #[2890 3530 2874 2361 2591 3000 2661]
Folder statistics
from simplified_keras.metrics import get_folders_statistics
stat = get_folders_statistics('../data/normal/train')
print(stat.nr_of_elements, stat.info) # 28709 {'0': 3995, '1': 436, '2': 4097, '3': 7215, '4': 4830, '5': 3171, '6': 4965}
fig = stat.bar_plot()
Result:
Transformations
Convert predictions to classes array
from simplified_keras.transformations import predictions_to_classes
predictions = model.predict(validation_images)
predicted_classes = predictions_to_classes(predictions)
print(pedicted_classes) #[6 3 3 ... 6 2 0]
Convert one hot encoding to sparse
from simplified_keras.transformations import predictions_to_classes, one_hot_to_sparse
sparse_labels = one_hot_to_sparse(validation_labels)
print(sprase_labels) #[6 6 6 ... 6 2 0]
PyPi
TODO
- nothing :)
Development
Want to contribute? Great!
To fix a bug or enhance an existing module, follow these steps:
- Fork the repo
- Create a new branch (
git checkout -b improve-feature
) - Make the appropriate changes in the files
- Verify if they are correct
- Add changes to reflect the changes made
- Commit changes
- Push to the branch (
git push origin improve-feature
) - Create a Pull Request
Status
Library is: in progress
Contact
albert.lis.1996@gmail.com - feel free to contact me!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for simplified_keras-0.0.11-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d7a5c3c138bf79b0a0f0b475d3221901869e56f062aa5cb66a48b2c3240b2c7 |
|
MD5 | ef86c8bca5768bc820497c0fabb9dbe0 |
|
BLAKE2b-256 | 7afe88385b2a069423d92afc8a066cecd6696589d5916c3aab10f2ba3a265c32 |