我有一个训练数据集,形状为 (108885, 128):
>print(features)array([[155, 22, 159, ..., 117, 134, 255],
[149, 17, 160, ..., 125, 84, 255],
[149, 21, 157, ..., 98, 49, 255],
...,
[159, 35, 136, ..., 3, 0, 255],
[150, 28, 111, ..., 0, 0, 255],
[149, 30, 107, ..., 0, 0, 255]], dtype=uint8)
此外,我还有一热编码标签(5个类别),形状为 (108885, 5):
>print(one_hot_labels)array([[0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0.],
...,
[0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 1., 0., 0.]], dtype=float32)
我尝试拟合一个简单的Keras模型:
model = Sequential()model.add(Dense(64, input_shape=features[0].shape, activation="tanh"))model.add(Dense(5, activation="softmax"))model.compile(optimizer=SGD(lr=0.001, decay=1e-6, momentum=0.9, nesterov=True), loss="categorical_crossentropy", metrics=["accuracy"])model.fit(features, one_hot_labels, epochs=10, batch_size=32, validation_split=0.33)
我尝试了第一层Dense层中不同的激活函数(sigmoid, tanh, linear(!), relu),不同的学习率、衰减和epoch数量。但每次在第一个epoch之后都没有拟合进展(例如):
Epoch 1/1072952/72952 [==============================] - 3s 42us/step - loss: 5.6170 - acc: 0.6515 - val_loss: 5.8685 - val_acc: 0.6359Epoch 2/1072952/72952 [==============================] - 2s 32us/step - loss: 4.9206 - acc: 0.6947 - val_loss: 5.8685 - val_acc: 0.6359Epoch 3/1072952/72952 [==============================] - 2s 33us/step - loss: 4.9206 - acc: 0.6947 - val_loss: 5.8685 - val_acc: 0.6359Epoch 4/1072952/72952 [==============================] - 2s 32us/step - loss: 4.9206 - acc: 0.6947 - val_loss: 5.8685 - val_acc: 0.6359Epoch 5/1072952/72952 [==============================] - 2s 33us/step - loss: 4.9206 - acc: 0.6947 - val_loss: 5.8685 - val_acc: 0.6359
我知道这不是正常的行为,但我无法找出原因。您能帮我理解这个问题吗?
回答:
显然,问题通过@AmirHadifar在评论中建议的对输入数据进行归一化而得到解决。
注意:此答案作为社区wiki发布,按照接受答案中“没有答案的问题,但在评论(或在聊天中扩展)中解决了问题”的建议。