我正在尝试在 Keras 中制作 CNN,为了测试我的模型的有效性,我试图让它在 MNIST 数据集上进行训练,所以我确信一切正常,但不幸的是模型几乎没有训练,我怀疑没有更新。我的模型是:
model=Sequential()
#conv1_1
model.add(Conv2D(128,kernel_size=3, strides=1,
padding='SAME', use_bias=False,
activation='relu',name='conv1_1',input_shape=(28,28,1)))
#conv1_2
model.add(Conv2D(128, kernel_size=3, strides=1,
padding='SAME', use_bias=False,
activation='relu',name='conv1_2'))
model.add(MaxPooling2D(pool_size=2,strides=2))
#conv2_1
model.add(Conv2D(64, kernel_size=3, strides=1,
padding='SAME', use_bias=False,
activation='relu',name="conv2_1"))
#conv2_2
model.add(Conv2D(64, kernel_size=3, strides=1,
padding='SAME', use_bias=False,
activation='relu',name='conv2_2'))
model.add(MaxPooling2D(pool_size=2,strides=2))
model.add(Flatten())
model.add(Dense(1024, activation='relu',name='Dense1'))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu',name='Dense2'))
model.add(Dense(10, activation='softmax',name='output'))
编译:
model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
model.fit(X_train,y_train,batch_size=10,validation_split=0.2,epochs=10)
我的 X_train 和 y_train 看起来像:
plt.imshow(X_train[0].reshape(28,28))
plt.show()
y_train[0]
array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.])
以下是前 3 个 epoch 的结果:
Epoch 1/10
48000/48000 [==============================] - 45s 927us/step - loss: 14.2813 - acc: 0.1140 - val_loss: 14.4096 - val_acc: 0.1060
Epoch 2/10
48000/48000 [==============================] - 44s 915us/step - loss: 14.2813 - acc: 0.1140 - val_loss: 14.4096 - val_acc: 0.1060
Epoch 3/10
48000/48000 [==============================] - 44s 924us/step - loss: 14.2813 - acc: 0.1140 - val_loss: 14.4096 - val_acc: 0.1060
Epoch 4/10
48000/48000 [==============================] - 45s 930us/step - loss: 14.2813 - acc: 0.1140 - val_loss: 14.4096 - val_acc: 0.1060
这是我的第一个 Keras 模型,我认为我在这里遗漏了一些重要的东西。
