TensorFlow 2训练数值平方计算模型无法正常运行问题咨询
模型无法正常工作的核心原因
- 模型结构不符合拟合需求:你当前只用了1层不带激活函数的
Dense(1),本质是线性模型,只能拟合y = w*x + b这类线性关系,而平方计算是二次非线性关系,线性模型根本不可能拟合该函数,需要增加带非线性激活的隐藏层。 - 损失函数选型错误:
binary_crossentropy(二分类交叉熵)是面向二分类任务的损失函数,仅适用于输出是0/1类别概率的场景,你当前做的是数值回归任务,应该使用回归类损失比如mean_squared_error(均方误差)。 - 输入数据维度/类型不匹配:你生成的输入
x形状是(1000,),数据类型为int32,而Dense层默认要求输入维度为(样本数, 特征数),同时浮点型数据更适合神经网络训练,需要调整维度并转换为float32类型。 - 训练轮数过少:仅设置5轮训练远远不足以让模型收敛到合理参数,至少需要设置数百轮训练。
修正后的可运行代码
import tensorflow as tf from tensorflow import keras # 生成输入输出,调整维度和类型 x = tf.random.uniform((1000, 1), minval=-100, maxval=100, dtype='float32') y = tf.square(x) # 调整模型结构,增加带激活的隐藏层 model = keras.Sequential([ keras.layers.Dense(16, activation='relu'), keras.layers.Dense(16, activation='relu'), keras.layers.Dense(1) ]) # 改用回归损失 model.compile(loss='mean_squared_error', optimizer='adam') # 增加训练轮数 model.fit(x, y, epochs=300, batch_size=50, verbose=0) print(model.predict([2], verbose=0)) # 输出接近4即为正常
内容的提问来源于stack exchange,提问作者Oleg K
相关产品推荐
相关产品推荐

