我已经开始使用
keras
和 tensorflow
学习机器学习,我想用 TSV-file
训练神经网络。然而,我的val_accuracy
总是一样的。 TSV-file
有 1000 用于预测的参数和 1 输出只能是 0 或 1。
我尝试使用不同的优化器和损失,改变
Dense
层、单元和激活函数的数量。这是我的模型
model = keras.Sequential([
keras.Input((1000,)),
normalize,
keras.layers.Dense(1000, activation=keras.activations.relu),
keras.layers.Dense(200, activation=keras.activations.relu),
keras.layers.Dense(50, activation=keras.activations.relu),
keras.layers.Dense(1, )
])
model.compile(optimizer='adam', loss=keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])
losses = model.fit(train_data, train_labels, epochs=80, validation_split=0.2)
之后
model.fit
我得到了这个结果:
Epoch 77/80
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 36ms/step - accuracy: 0.3374 - loss: nan - val_accuracy: 0.1786 - val_loss: nan
Epoch 78/80
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 24ms/step - accuracy: 0.3603 - loss: nan - val_accuracy: 0.1786 - val_loss: nan
Epoch 79/80
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - accuracy: 0.3041 - loss: nan - val_accuracy: 0.1786 - val_loss: nan
Epoch 80/80
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 25ms/step - accuracy: 0.3645 - loss: nan - val_accuracy: 0.1786 - val_loss: nan
其中
val_accuracy
始终为 0.1786 和 loss
nan。也许我不明白如何使用Dense
层。那么我该如何解决这个问题呢?如需了解更多信息,您可以在 Google Colab 上使用 TSV-file
检查我的代码
model.fit
的输出表明它无法计算损失。如果损失保持为nan
,训练过程将不会调整参数,因此模型不会改善其val_accuracy
。
我在你的源代码中注意到你正在替换“?”与
None
:
train_data = np.array(data.map(lambda x: None if x == '?' else int(x)))
使用这些
None
值,模型将无法计算输出。我建议在使用它们进行训练之前用 None
过滤掉它们。