In [20]:
import keras
from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D
import numpy as np
import os
import wandb
from wandb.keras import WandbCallback
import matplotlib.pyplot as plt
In [44]:
wandb.init(project="cifar")
config = wandb.config
config.dropout = 0.25
config.dense_layer_nodes = 100
config.learn_rate = 0.08
config.batch_size = 256
config.epochs = 50
class_names = ['airplane','automobile','bird','cat','deer',
'dog','frog','horse','ship','truck']
num_classes = len(class_names)
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
In [22]:
plt.imshow(X_train[10])
Out[22]:
In [45]:
# Convert class vectors to binary class matrices.
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
In [60]:
X_train = X_train.astype('float32') / 255.
X_test = X_test.astype('float32') / 255.
In [62]:
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',
input_shape=X_train.shape[1:], activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(config.dropout))
model.add(Flatten())
model.add(Dense(config.dense_layer_nodes, activation='relu'))
model.add(Dropout(config.dropout))
model.add(Dense(num_classes, activation='softmax'))
In [63]:
model.compile(loss='categorical_crossentropy',
optimizer="adam",
metrics=['accuracy'])
In [58]:
wandb.init()
model.fit(X_train,y_train,batch_size=config.batch_size,
epochs=10,
validation_data=(X_test, y_test),
callbacks=[WandbCallback()]
)
In [54]:
datagen = ImageDataGenerator()
datagen.fit(X_train)
In [64]:
wandb.init()
model.fit_generator(datagen.flow(X_train, y_train, batch_size=config.batch_size),
steps_per_epoch=X_train.shape[0] // config.batch_size,
epochs=config.epochs,
validation_data=(X_test, y_test),
callbacks=[WandbCallback()]
)
Out[64]:
In [43]:
Out[43]:
In [41]:
In [42]:
In [ ]: