为什么我的Keras神经网络总是为所有输入预测相同的标签?

时间:2019-04-01 05:33:13

标签: python-3.x keras neural-network deep-learning bias-neuron

问题

我试图预测猫与非猫的两类问题。我的标签是二进制的(1和0)。我面临的问题是,无论真实标签是什么,Keras总是将所有面孔预测为猫。我在该论坛上浏览了几篇类似的帖子,以找出问题所在。.他们似乎都没有说服我的问题。我的训练数据集和测试数据集经过适当的预处理(转换为0到1的范围)。我也意识到训练的准确性是我输入标签(值为0和1的标签)的平均值。

我已经尝试了什么?

  • 尝试减少编号。在我的隐藏层中的神经元;
  • 将学习率调整为不同的值;
  • 调整了批量大小;
  • 试图在最后一层更改激活功能;
  • 尝试了不同的损失函数;
  • 尝试了不同的优化程序;
  • 确保将训练数据改组。

我正在复制以下代码的关键部分,以获取更多见解:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(200, input_shape=(12288,), 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))
model.add(tf.keras.layers.Dense(1, input_shape=(200,), activation='relu', 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))
model.add(tf.keras.layers.Dense(1, activation='tanh', 
kernel_initializer='random_uniform',
            bias_initializer='zeros'))

# Compile the model
sgd = tf.keras.optimizers.SGD(lr=0.004, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error',
          optimizer=sgd,
          metrics=['accuracy'])

model.fit(train_x, train_labels,
      batch_size=batch_size,
      shuffle=True,
      epochs=epochs,
      validation_data=(test_x, test_labels))

# Evaluate the model
scores = model.evaluate(test_x, test_labels)

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])

我的输出始终是这样的:

Epoch 14/15
209/209 [==============================] - 0s 1ms/sample - loss: 0.2259 - acc: 0.6555 - val_loss: 0.3237 - val_acc: 0.3400
Epoch 15/15
209/209 [==============================] - 0s 1ms/sample - loss: 0.2261 - acc: 0.6555 - val_loss: 0.3229 - val_acc: 0.3400
50/50 [==============================] - 0s 333us/sample - loss: 0.3229 - acc: 0.3400
Loss: 0.323
Accuracy: 0.340

以上准确性只是我的二进制训练目标中所有目标的平均值。

0 个答案:

没有答案