You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

训练学习y=2*x的简单神经网络准确率接近0该如何解决

准确率极低的核心原因
  • 选错了任务类型对应的损失函数:你要做的是连续数值预测的回归任务,但你用了BinaryCrossentropy(二元交叉熵),这是专门给二分类任务设计的损失函数,完全不适用于回归场景,会导致模型训练方向完全错误,无法收敛。
  • 选错了评估指标:accuracy(准确率)是分类任务的专属指标,统计的是预测类别和真实类别完全一致的样本占比。回归任务输出的是连续浮点数,几乎不可能和真实标签完全相等,所以你看到的准确率自然无限接近0,这个指标本身就不该用在这个场景里。
  • 训练配置缺失:model.fit默认的训练轮次和每轮步长都不匹配你的无限生成器,训练步数不足也会导致模型没学到规律。

你之前尝试的调整batch大小、增加网络层、归一化数值等操作都没有解决损失和指标选择错误的核心问题,所以无法提升效果。

修复后的最小可运行代码

核心修改点:将损失函数替换为回归任务常用的MSE(均方误差),评估指标换成MAE(平均绝对误差,用来衡量预测值和真实值的平均差距),补充训练步长和轮次配置。

import tensorflow as tf
import numpy as np


def data_generator(batch_size):
    start = 0
    end = start + batch_size

    while True:
        x = np.arange(start, end)
        y = 2 * np.arange(start, end)

        x = np.expand_dims(x, axis=-1)
        y = np.expand_dims(y, axis=-1)

        yield x, y

        start += batch_size
        end = start + batch_size


model = tf.keras.Sequential([
    tf.keras.layers.InputLayer(input_shape=(1,)),
    tf.keras.layers.Dense(1),
])

# 适配回归任务的编译配置
model.compile(
    loss=tf.keras.losses.MeanSquaredError(),
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    metrics=[tf.keras.metrics.MeanAbsoluteError()],
)

batch_size = 32
generator_training = data_generator(batch_size)
generator_testing = data_generator(batch_size)

# 补充训练参数配置
model.fit(
    x=generator_training,
    validation_data=generator_testing,
    steps_per_epoch=100,
    epochs=10,
    validation_steps=10
)

# 验证效果:输入x=10,预期输出接近20
print("测试输入x=10的预测结果:", model.predict(np.array([[10]]))[0][0])
# 打印权重,正常会收敛到接近2,偏置接近0
print("Dense层权重:", model.layers[0].get_weights()[0][0][0])
print("Dense层偏置:", model.layers[0].get_weights()[1][0])

训练完成后你会看到损失和MAE都持续下降趋近于0,模型权重会收敛到接近2,完美拟合y=2x的映射关系。

内容的提问来源于stack exchange,提问作者FromTheStackAndBack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:18:02