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

仅使用ReLU激活的神经网络无法过拟合小数据集的问题咨询

问题诊断与原因分析

你的代码没有语法错误,无法实现完全过拟合是训练配置和数值特性共同导致的,核心原因如下:

  • 学习率设置过低:你当前用的learning_rate=0.0001步长太小,针对这个小数据集的训练效率极低,1000轮的训练量不足以让参数更新到能完全拟合所有样本的位置。
  • 数值范围放大了收敛难度:你的输入x范围为502000、输出y范围为6004000,MSE损失初始值会达到1e6级别,低学习率下损失下降的速度会被进一步拖慢。
  • 网络容量边际不足:每层16个神经元的容量刚好够拟合50个样本,但一旦出现部分ReLU神经元死亡(输出恒为0、失去更新能力),就会出现容量不足的问题,进一步阻碍损失下降。
适配要求的调整方案(不更换激活函数、不做归一化)

只需要调整训练参数和网络宽度即可快速实现过拟合,调整点如下:

  • 把Adam学习率提升到默认的0.001,甚至可以调到0.005,足够的步长才能快速让参数收敛到拟合位置。
  • 把每层神经元数量k调整为32或64,冗余的容量可以抵消ReLU死亡神经元带来的容量损失,更易记忆小样本。
  • 可以将训练轮次提升到3000轮,给参数足够的更新次数完成样本记忆。

调整后参考代码

import numpy as np
import tensorflow as tf

n = 50
x = np.random.randint(50, 2000,  (n, 10))
y = np.random.randint(600, 4000,  (n, 1))

k = 32

model = tf.keras.Sequential([  
        tf.keras.layers.Flatten(input_shape=(10,)),
        tf.keras.layers.Dense(k, activation='relu'),
        tf.keras.layers.Dense(k, activation='relu'),
        tf.keras.layers.Dense(k, activation='relu'),
        tf.keras.layers.Dense(k, activation='relu'),
        tf.keras.layers.Dense(1) 
    ])

model.compile(loss='mse',optimizer = tf.keras.optimizers.Adam(learning_rate=0.001))   
model.fit(x, y, epochs=3000, batch_size=1, verbose=2)

按上述代码运行后,最终MSE损失可以降到1以下,接近零值,完全实现对50个样本的过拟合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:01