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

TensorFlow神经网络回归模型拟合非线性数据仅输出线性结果如何解决

TensorFlow 1D回归模型无法拟合非线性分布的解决方案

核心问题定位

  • 初始学习率设置过高:你当前设置的initial_learning_rate=1e0(即1.0)远高于Adam优化器的常规适用区间(1e-4 ~ 1e-3),过高的学习率会导致参数更新步长过大,无法收敛到非线性拟合所需的局部最优解,最终只能输出近似线性的结果。
  • 正则化强度超出需求:当前任务属于简单1D拟合,欠拟合风险远高于过拟合,加入两层Dropout会进一步限制模型的拟合能力,阻碍非线性特征的学习。
  • 缺失数据预处理步骤:如果输入特征、标签未做标准化/归一化处理,会导致ReLU激活函数容易进入饱和区或出现神经元死亡,丧失非线性表达能力。

调整后的代码示例

import tensorflow as tf
from tensorflow.keras import layers

# 训练前先对输入输出做归一化,示例逻辑:
# mean = train_features.mean()
# std = train_features.std()
# train_features_norm = (train_features - mean) / std
# label_mean = train_labels.mean()
# label_std = train_labels.std()
# train_labels_norm = (train_labels - label_mean) / label_std

model = tf.keras.Sequential([
    layers.Dense(128, activation='relu', input_dim=1),
    layers.Dense(32, activation='relu'),
    layers.Dense(8, activation='relu'),
    layers.Dense(units=1)
])

# 调低初始学习率,调整衰减策略
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=1e-3,
    decay_steps=200,
    decay_rate=0.5
)

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=lr_schedule), loss='mse')
# 如果做了归一化,这里传入归一化后的特征和标签
history = model.fit(train_features, train_labels, epochs=300, validation_split=0.2, verbose=0)

# 预测时如果做了归一化,要把结果反归一化回原始数值区间
# pred = model.predict(test_features_norm) * label_std + label_mean

验证建议

  • 训练完成后先查看训练集和验证集的最终损失值,如果训练损失远低于验证损失,再考虑加入少量Dropout(rate=0.1左右)或L2正则化。
  • 可以先关闭学习率衰减,使用固定1e-3学习率训练,确认模型能够拟合非线性分布后,再加入衰减策略优化收敛效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:24:03