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

TensorFlow训练X³+Y²拟合模型损失率过高求助

拟合X³+Y²模型损失过高的排查思路

核心问题与排查方向

  • 模型结构无法捕捉非线性关系:你当前使用的是Dense(1, input_shape=[2])的单层线性模型,它只能学习形如y = w1*x1 + w2*x2 + b的线性映射,但目标公式X³+Y²是非线性函数,线性模型完全没有能力拟合这种曲线关系,这是损失居高不下的根本原因。

  • 数据未做归一化处理:输入X的取值范围是1-12,但输出y的数值跨度极大(比如当X=[12,5]时y=1753,X=[1,3]时y=10)。这种数量级的差异会导致SGD优化器在更新权重时出现震荡,难以收敛到最优解,直接拖慢训练效率甚至导致损失无法下降。

  • 模型容量不足:即使解决了归一化问题,单层模型的表达能力远远不够。需要引入带非线性激活函数的隐藏层,让模型具备学习复杂非线性映射的能力。比如添加使用ReLU激活的隐藏层,提升模型的容量。

  • 优化器与训练参数设置:默认SGD的学习率可能不适合当前的数据尺度,建议换成Adam优化器(自适应学习率更稳定),同时可以根据训练情况调整epochs数量(比如增加到1000次)。

修正后的示例代码

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 准备数据集
X = np.array([
    [2, 4], [5, 6], [7, 8], [9, 1], [2, 2],
    [3, 5], [6, 7], [8, 9], [10, 2], [1, 3],
    [4, 6], [5, 9], [7, 3], [8, 4], [9, 7],
    [10, 10], [11, 2], [3, 7], [6, 4], [12, 5]
], dtype=float)
y = np.array([x[0]**3 + x[1]**2 for x in X], dtype=float)

# 数据归一化,缩小输入输出的数值范围
scaler_X = MinMaxScaler()
scaler_y = MinMaxScaler()
X_scaled = scaler_X.fit_transform(X)
y_scaled = scaler_y.fit_transform(y.reshape(-1, 1))

# 构建带非线性能力的模型
model = Sequential([
    Dense(16, activation='relu', input_shape=[2]),
    Dense(8, activation='relu'),
    Dense(1)
])

# 使用Adam优化器,设置合适的学习率
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), 
              loss="mean_squared_error")

# 训练模型
model.fit(X_scaled, y_scaled, epochs=1000, verbose=1)

# 测试并反归一化得到真实预测值
test_input = np.array([[2, 4]])
test_input_scaled = scaler_X.transform(test_input)
pred_scaled = model.predict(test_input_scaled, verbose=0)
pred = scaler_y.inverse_transform(pred_scaled)
print(f"预测值:{pred[0][0]:.2f},真实值:24")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:02:03