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

使用TensorFlow与MSE的神经网络准确率无法突破20%原因咨询

预测x²时准确率极低的原因分析
  • 核心问题:误用分类任务的评价指标
    你在模型编译时指定了metrics=["accuracy"],但准确率是专门给分类任务设计的——它统计的是模型预测结果和真实标签完全匹配的比例。而你的任务是回归(预测连续的x²值),神经网络几乎不可能输出和真实值完全一致的浮点数,所以这个准确率完全没有参考价值,自然会极低。
    解决:删掉metrics=["accuracy"],或者换成回归任务适用的指标,比如mae(平均绝对误差)。

  • 训练样本量严重不足
    你只用到了10个训练样本(x从0到9归一化后的数据),这么少的数据量,模型根本学不到x²的全局规律,要么过拟合到这10个点,要么完全没学到有效模式。
    解决:生成更多样本,比如用tf.range(1000, dtype="float32")/999.0来生成0到1之间的1000个连续样本,或者用随机采样的方式生成更多数据。

  • 可优化的细节

    • 目前250轮训练可能不够,可以尝试增加到500-1000轮,让模型有足够的时间收敛
    • 可以微调隐藏层的神经元数量,或者尝试调整Adam优化器的学习率(比如optimizer=keras.optimizers.Adam(learning_rate=0.001))

修正后的示例代码

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# 生成更多训练样本
x_train = tf.range(1000, dtype="float32")/999.0
y_train = (x_train)**2.0  # 直接用归一化后的x计算y,避免重复计算

x_train = tf.reshape(x_train, (len(x_train), 1))
y_train = tf.reshape(y_train, (len(y_train), 1))

model = keras.Sequential([
    layers.Dense(10, input_dim=1, activation='relu', kernel_initializer='he_uniform'),
    layers.Dense(10, activation='relu', kernel_initializer='he_uniform'),
    layers.Dense(1)
])

# 去掉accuracy,用MSE作为损失,可选添加MAE作为监控指标
model.compile(
    loss = "mse",
    optimizer = "adam",
    metrics = ["mae"],  # 回归任务用MAE更合理
)

# 增加训练轮次
model.fit(x_train,y_train, epochs=500, batch_size=32, verbose=2)
yhat = model.predict(x_train)

# 反归一化查看结果(如果需要)
print(tf.abs(yhat*(999.0**2.0)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:55