Skip to content

Instantly share code, notes, and snippets.

View Raylow00's full-sized avatar
💭
Indie Game Developer and All Things Tech

Ray Low Raylow00

💭
Indie Game Developer and All Things Tech
View GitHub Profile
@Raylow00
Raylow00 / gist:28f2e92b51fb400b7ca68dbc61f2d335
Created December 12, 2020 07:45
Making predictions using transfer learning
from keras.applications.vgg16 import VGG16
model = VGG16(weights='imagenet')
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np
image_path = '/content/drive/My Drive/Image Datasets/random_pictures/sample_cat.jpeg'
img = image.load_img(image_path, target_size=(224, 224))
@Raylow00
Raylow00 / gist:76dc8581d2fa9fd3bc828df751695bb9
Created December 12, 2020 07:44
Adding dense layers on top of the pre-trained model
from keras import models
from keras import layers
model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
@Raylow00
Raylow00 / gist:eaf72175321af14e4afd621721fc1102
Created December 12, 2020 07:42
Set trainable in pre-trained model
conv_base.trainable = True
set_trainable = False
for layer in conv_base.layers:
if layer.name == 'block5_conv1':
set_trainable = True
if set_trainable:
layer.trainable = True
else:
@Raylow00
Raylow00 / gist:3be9d7901aa9d694e5d7eec162af5959
Created December 12, 2020 07:29
Transfer learning VGG16
from keras.applications import VGG16
conv_base = VGG16(weights='imagenet',
include_top = False,
input_shape=(150, 150, 3))
conv_base.summary()
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(96, (11, 11), strides=(4, 4), activation='relu', input_shape=(224, 224, 3)))
model.add(layers.MaxPooling2D((3, 3), strides=(2, 2))
model.add(layers.Conv2D(256, (5, 5), padding='same', activation='relu'))
model.add(layers.MaxPooling2D((3, 3), strides=(2, 2)))
model.add(layers.Conv2D(384, (3, 3), padding='same', activation='relu'))
model.add(layers.Conv2D(384, (3, 3), padding='same', activation='relu'))
@Raylow00
Raylow00 / gist:f966fb3033006dc71fceda2f4bab51cd
Created November 30, 2020 13:05
Training the model and plot the accuracy/loss graphs
history = model.fit_generator(train_generator, steps_per_epoch=100, epochs=20, validation_data=validation_generator, validation_steps=50)
acc = history.history['accuracy'][-1]
val_acc = history.history['val_accuracy'][-1]
loss = history.history['loss'][-1]
val_loss = history.history['val_loss'][-1]
print("Training accuracy: ", acc)
print("Training loss: ", loss)
@Raylow00
Raylow00 / gist:84f9a3ff18dbc6c68f65c95252fb1345
Created November 30, 2020 13:04
Do more than just rescaling using ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
rotation_range = 40,
width_shift_range = 0.2,
height_shift_range = 0.2,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
val_datagen = ImageDataGenerator(rescale = 1./255)
@Raylow00
Raylow00 / gist:034db918c8efb651fe996a43fa58bb43
Created November 30, 2020 13:02
Normalizing the images using ImageDataGenerator
from keras.preprocessing.image import ImageDataGenerator
train_dir = os.path.join(base_dir, 'train')
test_dir = os.path.join(base_dir, 'test')
validation_dir = os.path.join(base_dir, 'validation')
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)
# class_mode: binary because we need binary labels (from using binary_crossentropy)
@Raylow00
Raylow00 / gist:25af178f7cf8f2b799ce610c5c2f7b71
Last active November 30, 2020 12:55
Building the modified AlexNet model
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(32, (11, 11), activation='relu', input_shape=(224, 224, 3)))
model.add(layers.MaxPooling2D((3, 3)))
model.add(layers.Conv2D(64, (5, 5), activation='relu'))
model.add(layers.MaxPooling2D((3, 3)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
@Raylow00
Raylow00 / gist:c3cf7ae76066a6cd56250416d750c0bc
Created November 30, 2020 12:52
Resizing images from shape (150, 150) to (224, 224)
import tensorflow as tf
from tensorflow.image import ResizeMethod
from keras.preprocessing import image
import numpy as np
from PIL import Image
resized_shape = (224, 224, 3)
alexnet_base_folder = '/content/drive/My Drive/Image Datasets/cats_and_dogs_alexnet'
alexnet_cats_train_dir = os.path.join(alexnet_base_folder, 'train/cats')