Refactor My Code to Get It to Run on Jupyter Python Coding Task
Run the code to build a convolutional neural network model that includes a deeper network and data augmentation.from keras.datasets import cifar10from keras.utils import np_utilsfrom keras.models import Sequentialfrom keras.layers.core import Dense, Dropout, Activation, Flattenfrom keras.layers.convolutional import Conv2D, MaxPooling2Dfrom keras.optimizers import SGD, Adam, RMSpropimport matplotlib.pyplot as plt# CIFAR_10 is a set of 60K images 32x32 pixels on 3 channelsIMG_CHANNELS = 3IMG_ROWS = 32IMG_COLS = 32#constantBATCH_SIZE = 128NB_EPOCH = 20NB_CLASSES = 10VERBOSE = 1VALIDATION_SPLIT = 0.2OPTIM = RMSprop()#load dataset(X_train, y_train), (X_test, y_test) = cifar10.load_data()print('X_train shape:', X_train.shape)print(X_train.shape[0], 'train samples')print(X_test.shape[0], 'test samples')# convert to categoricalY_train = np_utils.to_categorical(y_train, NB_CLASSES)Y_test = np_utils.to_categorical(y_test, NB_CLASSES)# float and normalizationX_train = X_train.astype('float32')X_test = X_test.astype('float32')X_train /= 255X_test /= 255# networkmodel = Sequential()model.add(Conv2D(32, (3, 3), padding='same',input_shape=(IMG_ROWS, IMG_COLS, IMG_CHANNELS)))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(512))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(NB_CLASSES))model.add(Activation('softmax'))model.summary()# trainmodel.compile(loss='categorical_crossentropy', optimizer=OPTIM,metrics=['accuracy'])model.fit(X_train, Y_train, batch_size=BATCH_SIZE,epochs=NB_EPOCH, validation_split=VALIDATION_SPLIT,verbose=VERBOSE)score = model.evaluate(X_test, Y_test,batch_size=BATCH_SIZE, verbose=VERBOSE)print("Test score:", score[0])print('Test accuracy:', score[1])#save modelmodel_json = model.to_json()open('cifar10_architecture.json', 'w').write(model_json)#And the weights learned by our deep network on the training setmodel.save_weights('cifar10_weights.h5', overwrite=True)model = Sequential()model.add(Conv2D(32, (3, 3), padding='same',input_shape=(IMG_ROWS, IMG_COLS, IMG_CHANNELS)))model.add(Activation('relu'))model.add(Conv2D(32, (3, 3), padding='same'))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Conv2D(64, (3, 3), padding='same'))model.add(Activation('relu'))model.add(Conv2D(64, 3, 3))model.add(Activation('relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(512))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(NB_CLASSES))model.add(Activation('softmax'))from keras.preprocessing.image import ImageDataGeneratorfrom keras.datasets import cifar10import numpy as npNUM_TO_AUGMENT=5#load dataset(X_train, y_train), (X_test, y_test) = cifar10.load_data()# augumentingprint("Augmenting training set images...")datagen = ImageDataGenerator(rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')xtas, ytas = [], []for i in range(X_train.shape[0]): num_aug = 0x = X_train[i] # (3, 32, 32)x = x.reshape((1,) + x.shape) # (1, 3, 32, 32)for x_aug in datagen.flow(x, batch_size=1,save_to_dir='preview', save_prefix='cifar', save_format='jpeg'): if num_aug >= NUM_TO_AUGMENT: breakxtas.append(x_aug[0])num_aug += 1#fit the datagetdatagen.fit(X_train)# trainhistory = model.fit_generator(datagen.flow(X_train, Y_train,batch_size=BATCH_SIZE), samples_per_epoch=X_train.shape[0],epochs=NB_EPOCH, verbose=VERBOSE)score = model.evaluate(X_test, Y_test,batch_size=BATCH_SIZE, verbose=VERBOSE)print("Test score:", score[0])print('Test accuracy:', score[1])