使用TensorFlow构建模型拟合x=y函数遇精度与收敛问题求助
问题分析与解决方案
你的代码逻辑本身没问题,但学习率设置过高是导致模型无法快速收敛、精度不佳的核心原因。
具体问题点
Adam优化器的默认学习率是1e-3,你设置了1e-1(比默认大100倍)。对于拟合y=x这种极简单的线性任务,过高的学习率会让优化过程在最优解附近持续震荡,无法稳定收敛到w=1、b=0的理想参数。
修正后的代码
调整学习率并添加训练过程的损失输出,方便观察收敛情况:
import numpy as np import tensorflow as tf x_data = np.arange(32).reshape(-1,1)/32 y_data = np.copy(x_data) inputs = tf.keras.Input(shape=1) output = tf.keras.layers.Dense(units=1, activation='linear')(inputs) model = tf.keras.Model(inputs=[inputs], outputs=output) model.summary() # 降低学习率到1e-3(或1e-2,可根据情况微调) model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3), loss='mae') # 添加verbose=1查看每轮损失变化 model.fit(x=x_data, y=y_data, epochs=1000, verbose=1) # 查看训练后的权重 print("训练后的权重:") print(model.layers[1].get_weights())
额外建议
- 无需训练10000轮,这个简单任务通常几百轮就能收敛到接近最优的状态
- 可以改用MSE损失,对于线性回归任务,MSE的收敛稳定性通常比MAE更好
- 训练后打印权重,确认
w是否接近1,b是否接近0,直观验证模型效果
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

