| import tensorflow as tf |
| from tensorflow.keras.models import Sequential |
| from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D |
| from tensorflow.keras.layers import ZeroPadding2D |
| from keras.layers.normalization import BatchNormalization |
| from tensorflow.keras.preprocessing.image import ImageDataGenerator |
|
|
| model = Sequential() |
|
|
| model.add(Conv2D(64, (9, 9), input_shape=(100,100,3),padding='same')) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(MaxPooling2D(pool_size=(2, 2))) |
|
|
| model.add(Conv2D(128, (5, 5), padding='same')) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(MaxPooling2D(pool_size=(2, 2))) |
|
|
| model.add(ZeroPadding2D((1, 1))) |
| model.add(Conv2D(256, (3, 3), padding='same')) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(MaxPooling2D(pool_size=(2, 2))) |
|
|
| model.add(ZeroPadding2D((1, 1))) |
| model.add(Conv2D(512, (3, 3), padding='same')) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
|
|
| model.add(ZeroPadding2D((1, 1))) |
| model.add(Conv2D(512, (3, 3), padding='same')) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(MaxPooling2D(pool_size=(2, 2))) |
|
|
| model.add(Flatten()) |
| model.add(Dense(64)) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(Dropout(0.5)) |
|
|
| model.add(Dense(128)) |
| model.add(BatchNormalization()) |
| model.add(Activation('relu')) |
| model.add(Dropout(0.5)) |
|
|
| model.add(Dense(1)) |
| model.add(BatchNormalization()) |
| model.add(Activation('sigmoid')) |
|
|
| model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) |
|
|
| train_datagen = ImageDataGenerator(rescale = 1./255, |
| rotation_range=30, |
| shear_range=0.2, |
| zoom_range=[0.8, 1.2], |
| horizontal_flip=True, |
| |
| fill_mode='nearest') |
|
|
| test_datagen = ImageDataGenerator(rescale = 1./255) |
|
|
| training_set = train_datagen.flow_from_directory('/content/drive/My Drive/data/train', |
| target_size = (100, 100), |
| batch_size = 64, |
| class_mode = 'binary') |
|
|
| test_set = test_datagen.flow_from_directory('/content/drive/My Drive/data/val', |
| target_size = (100, 100), |
| batch_size = 64, |
| class_mode = 'binary') |
| my_callbacks = [ |
| |
| tf.keras.callbacks.ReduceLROnPlateau(factor=0.1, patience=3, min_lr=0.00001, verbose=1), |
| tf.keras.callbacks.ModelCheckpoint('my_model2.h5', |
| verbose=1, save_best_only=True, save_weights_only=False) |
| ] |
|
|
| model.fit(training_set, epochs=200, validation_data = test_set, callbacks=my_callbacks) |
|
|
| model.save('my_model2.h5') |
|
|