神經網絡比較深…下面的代碼最好運行在GPU上
環境參數:Keras == 2.1.2
Tensorflow = 1.4.0
<code>import kerasfrom
keras.datasets import cifar10from
keras.preprocessing.image import ImageDataGeneratorfrom
keras.models import Sequentialfrom
keras.layers import Dense,Dropout,Flatten,Activationfrom
keras.layers import Conv2D,MaxPooling2D,ZeroPadding2D,GlobalMaxPooling2D batch_size =32
num_classes =10
epochs =1600
data_augmentation = True (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'
) x_train = x_train.astype('float32'
) x_test = x_test.astype('float32'
) x_train /=255
x_test /=255
y_train =keras.utils.to_categorical(y_train,num_classes) y_test =keras.utils.to_categorical(y_test,num_classes) model = Sequential() model.add
(Conv2D(32
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(32
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(32
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(48
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(48
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(MaxPooling2D(pool_size=(2
,2
))) model.add
(Dropout(0.25
)) model.add
(Conv2D(80
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(80
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(80
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(80
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(80
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(MaxPooling2D(pool_size=(2
,2
))) model.add
(Dropout(0.25
)) model.add
(Conv2D(128
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(128
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(128
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(128
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(Conv2D(128
, (3
,3
), padding='same'
,input_shape=x_train.shape[1
:])) model.add
(Activation('relu'
)) model.add
(GlobalMaxPooling2D()) model.add
(Dropout(0.25
)) model.add
(Dense(500
)) model.add
(Activation('relu'
)) model.add
(Dropout(0.25
)) model.add
(Dense(num_classes)) model.add
(Activation('softmax'
)) model.summary() opt = keras.optimizers.Adam(lr =0.0001
) model.compile(loss='categorical_crossentropy'
,optimizer = opt,metrics = ['accuracy'
]) print("---------train---------"
) model.fit(x_train,y_train,epochs =600
,batch_size =128
,) print("---------test---------"
) loss,acc = model.evaluate(x_test,y_test) print("loss="
,loss) print("accuracy="
,acc)if
not data_augmentation: print('Not using data augmentation.'
) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_test, y_test), shuffle=True, callbacks=[tbCallBack])else
: print('Using real-time data augmentation.'
) datagen = ImageDataGenerator( featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, rotation_range=10
, width_shift_range=0.2
, height_shift_range=0.2
, horizontal_flip=True, vertical_flip=False) datagen.fit(x_train) model.fit_generator(datagen.flow(x_train,y_train,batch_size=batch_size), steps_per_epoch=x_train.shape[0
] epochs=epochs, validation_data=(x_test, y_test), callbacks=[tbCallBack])/<code>