Skip to content

Instantly share code, notes, and snippets.

@MaxHalford
Created August 6, 2018 09:25
Show Gist options
  • Save MaxHalford/1a1f5f8bb1b4a38790d184d6fa6e16f5 to your computer and use it in GitHub Desktop.
Save MaxHalford/1a1f5f8bb1b4a38790d184d6fa6e16f5 to your computer and use it in GitHub Desktop.
Keras CNN blueprint
import glob
import imageio
from keras import layers
from keras import losses
from keras import models
from keras import optimizers
import numpy as np
import pandas as pd
masks = pd.read_csv('data/train_ship_segmentations.csv', index_col=0)['EncodedPixels']
target = masks.notnull()[~masks.index.duplicated()].astype(np.uint8)
def bake_model():
init = layers.Input(shape=(768, 768, 3))
x = layers.Conv2D(32, (3, 3), activation='relu', padding='same')(init)
x = layers.Flatten()(x)
out = layers.Dense(1, activation='sigmoid')(x)
model = models.Model(inputs=init, outputs=out)
loss = losses.binary_crossentropy
optimizer = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss=loss, optimizer=optimizer, metrics=['accuracy'])
return model
def generate(batch_size):
features = np.zeros((batch_size, 768, 768, 3))
labels = np.zeros((batch_size, 1))
i = 0
while True:
for file in glob.glob('data/train/*.jpg'):
features[i] = imageio.imread(file)
labels[i] = target[file.split('/')[-1]]
i += 1
if i == batch_size:
i = 0
yield (features, labels)
def main():
model = bake_model()
model.fit_generator(
generate(batch_size=16),
steps_per_epoch=100,
epochs=10,
verbose=1
)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment