model = Sequential()
#conv layer
model.add(Conv2D(6,(5,5),activation = 'relu'))
#Maxpooling layer
model.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='same'))
#conv layer
model.add(Conv2D(16, (5, 5), activation='relu'))
#Maxpooling layer
model.add(MaxPooling2D(pool_size=(2, 2), strides=2, padding='same'))
#fully connected layer
model.add(Flatten()) # 进行全连接之前要将多维变量变成二维变量,因为全连接层的输入只能是二维变量即平化层
model.add(Dense(120, activation='relu')) # 增加一个激活函数提高模型参数的非线性能力
model.add(Dropout(0.5)) # 表示随机去掉50%的神经元连接
# Flatten() 因为上一层的输出就是一个二维变量,所以这里不需要进行拉直操作了
model.add(Dense(84, activation='relu')) # 增加一个激活函数提高模型参数的非线性能力
model.add(Dropout(0.5)) # 表示随机去掉50%的神经元连接
#output layer
model.add(Dense(7, activation='softmax')) # 增加这个激活函数便于多分类
from tensorflow.keras.optimizers import SGD
sgd = SGD(lr=0.01, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
# #compile
# model.compile(optimizer = 'adam',
# loss='sparse_categorical_crossentropy',
# metrics=['accuracy'])
#fit
model.fit(x_train, y_train,batch_size=20,epochs=20,validation_data=(x_test,y_test))