相同特征对应不同标签时,如何正确训练神经网络?
神经网络预测结果不符合预期的问题分析与解决
问题背景
你作为机器学习新手,在训练以下数据的神经网络后,预测结果不符合预期:
训练数据:
train_x = np.array([1, 1, 1, 2, 2, 2]) train_y = np.array([1., 0., 1., 0., 0., 1.])
模型构建与训练代码:
inpLayer = tf.keras.layers.Input(1) hiddenLayer = tf.keras.layers.Dense(2, activation='relu')(inpLayer) outputLayer = tf.keras.layers.Dense(1, activation='sigmoid')(hiddenLayer) model = tf.keras.models.Model(inpLayer, outputLayer) model.compile('adam', 'binary_crossentropy', metrics) model.fit(train_x, train_y, 1, 10000, 2)
训练10000次后,执行model.predict(np.array([1, 2]))得到结果:
[[0.50000435] [0.50000435]]
核心问题:训练数据无有效规律
你的训练数据本身不存在可学习的映射关系:
- 当输入
x=1时,对应的标签y既有1也有0,完全矛盾 - 当输入
x=2时,对应的标签y同样既有0也有1,没有固定规律
这种情况下,模型无法学到任何有效的输入输出对应关系,最终只能收敛到接近0.5的预测值——这相当于随机猜测,是模型在这种无规律数据下的合理表现。
代码中的其他小问题
除了数据本身的问题,你的代码还有几个需要修正的细节:
metrics参数未指定具体指标,应该写成metrics=['accuracy'],否则会引发参数错误- 输入数据建议调整为二维形状:
train_x = train_x.reshape(-1, 1),虽然Keras会自动适配一维输入,但显式调整能避免潜在的形状兼容问题 model.fit中的validation_split参数错误,该参数需要传入0到1之间的比例值(比如0.2表示用20%数据做验证),而不是整数2
解决建议
如果想要模型输出合理的预测结果,你需要:
- 重新整理训练数据,确保相同输入对应一致的标签,或者增加更多特征让模型能区分不同样本的差异
- 修正代码中的参数错误,确保训练过程正常运行
内容的提问来源于stack exchange,提问作者Majk
相关产品推荐
相关产品推荐

