使用Keras构建简单线性回归模型:预测结果异常求助
Keras线性回归模型预测异常的排查与修复
问题分析
你的代码存在三个核心问题,导致模型无法输出正确预测结果:
- 未正确导入模型与层类:直接使用
Sequential()和Dense()会触发NameError,这两个类需要从tf.keras.models和tf.keras.layers中导入。 - 输入数据格式不规范:Python列表并非Keras最优输入格式,可能导致训练过程中数据处理异常,影响收敛效果。
- 训练参数设置不足:当前学习率(0.005)过小、训练轮次(100)不足,模型还未收敛到最优权重(目标权重应为接近10的系数,偏置接近0)。
修复后的代码
import numpy as np import tensorflow as tf from tensorflow import keras # 将列表转为numpy数组,指定float32类型适配Keras输入要求 x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=np.float32) y = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], dtype=np.float32) # 正确导入并初始化模型 model = tf.keras.models.Sequential() model.add(tf.keras.layers.Dense(units=1, input_shape=(1,))) # 调整学习率,改用自适应效果更好的Adam优化器 model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1), loss='mse') # 增加训练轮次,确保模型充分收敛 model.fit(x, y, epochs=200, verbose=1) # 测试输入同样转为numpy数组 x1 = np.array([11, 12, 13], dtype=np.float32) predy = model.predict(x1) print("预测结果:", predy) # 查看模型权重,验证是否接近目标值[10, 0] print("模型权重:", model.layers[0].get_weights())
关键修改说明
- 修正导入路径:明确指定
tf.keras.models.Sequential和tf.keras.layers.Dense,避免命名错误。 - 规范数据格式:将输入数据转为
numpy.ndarray并指定float32类型,符合Keras对输入数据的标准要求。 - 优化训练参数:
- 提升学习率至0.1,加快模型收敛速度;
- 增加训练轮次至200,确保模型足够迭代以拟合
y=10x的线性规律; - 改用Adam优化器,其自适应学习率特性在简单线性任务中收敛更稳定。
运行修复后的代码,预测结果会接近[[110.], [120.], [130.]],模型权重也会趋近于[array([[10.]], dtype=float32), array([0.], dtype=float32)],符合预期的线性回归规律。
内容的提问来源于stack exchange,提问作者solo
相关产品推荐
相关产品推荐

