Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. from keras.datasets import cifar10
  2. from keras.layers import Conv2D, MaxPooling2D, BatchNormalization
  3. from keras.layers import Flatten, Dense, Input, concatenate, AveragePooling2D
  4. from keras.utils import np_utils
  5. from keras.optimizers import SGD
  6. from keras.models import Model
  7. from keras.optimizers import rmsprop
  8. from keras.callbacks import LearningRateScheduler
  9. from keras.preprocessing.image import ImageDataGenerator
  10.  
  11. def split_data(data):
  12.   (X_train, y_train), (X_test, y_test) = data.load_data()
  13.   X_train = X_train.astype('float32')
  14.   X_test = X_test.astype('float32')
  15.   X_train = X_train / 255.0
  16.   X_test = X_test / 255.0
  17.   y_train = np_utils.to_categorical(y_train)
  18.   y_test = np_utils.to_categorical(y_test)
  19.   return X_train, y_train, X_test, y_test
  20.  
  21. def lr_schedule(epoch):
  22.     lrate = 0.001
  23.     if epoch > 4:
  24.         lrate = 0.0005
  25.     elif epoch > 6:
  26.         lrate = 0.0003        
  27.     return lrate
  28.  
  29. def create_inception_modules(data, num):
  30.     for i in range(num):
  31.         tower_lone = Conv2D(32, (1, 1), padding='same', activation='relu')(data)
  32.         tower_1 = Conv2D(64, (1,1), padding='same', activation='relu')(data)
  33.         tower_1 = Conv2D(64, (3,3), padding='same', activation='relu')(tower_1)
  34.  
  35.         tower_2 = Conv2D(128, (1,1), padding='same', activation='relu')(data)
  36.         tower_2 = Conv2D(128, (5,5), padding='same', activation='relu')(tower_2)
  37.  
  38.         tower_3 = MaxPooling2D((3,3), strides=(1,1), padding='same')(data)
  39.         tower_3 = Conv2D(256, (1,1), padding='same', activation='relu')(tower_3)
  40.         data = concatenate([tower_lone, tower_1, tower_2, tower_3], axis=3)
  41.     return data
  42.  
  43. def create_network(input_img):
  44.   output = create_inception_modules(input_img, 2)
  45.   output = AveragePooling2D((2, 2))(output)
  46.   output = Flatten()(output)
  47.   output = Dense(10, activation='softmax')(output)
  48.   return output
  49.  
  50. input_img = Input(shape = (32, 32, 3))
  51. output = create_network(input_img)
  52.  
  53. model = Model(inputs = input_img, outputs = output)
  54. # model.summary()
  55. datagen = ImageDataGenerator(
  56.     rotation_range=15,
  57.     width_shift_range=0.1,
  58.     height_shift_range=0.1,
  59.     horizontal_flip=True,
  60.     )
  61. datagen.fit(X_train)
  62. opt_rms = rmsprop(lr=0.001,decay=1e-6)
  63. model.compile(loss='categorical_crossentropy', optimizer=opt_rms, metrics=['accuracy'])
  64. X_train, y_train, X_test, y_test = split_data(cifar10)
  65.  
  66. epochs = 8
  67. batch_size = 64
  68. model.fit_generator(datagen.flow(X_train, y_train, batch_size=batch_size),\
  69.                     steps_per_epoch=X_train.shape[0] // batch_size,epochs=epochs,\
  70.                     verbose=1,validation_data=(X_test,y_test),
  71.                     callbacks=[LearningRateScheduler(lr_schedule)])
  72. model.fit(
  73.           X_train, y_train,
  74.           validation_data=(X_test, y_test),
  75.           epochs=epochs,
  76.           batch_size=batch_size,
  77.           callbacks=[LearningRateScheduler(lr_schedule)])
  78.  
  79. scores = model.evaluate(X_test, y_test, verbose=0)
  80.  
  81. print("Accuracy: %.2f%%" % (scores[1]*100))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement