Keras训练y=x²回归模型出现准确率为0%问题求助
解决Keras训练y=x²模型准确率为0%的问题
你的代码存在几个关键错误,导致模型完全无法学习到y=x²的规律,以下是问题分析和修正方案:
核心错误:任务类型混淆
你要解决的是回归任务(预测连续值y=x²),但代码里误用了分类任务的损失函数和评估指标:
SparseCategoricalCrossentropy是多分类任务的损失函数,完全不适合回归场景accuracy是分类任务的专属指标,对回归任务毫无意义,自然会显示0%
其他次要问题
- 数据形状不规范:
x_train和y_train被定义为(1,5000)的形状,Keras默认要求输入数据格式为(样本数, 特征数),即应该是(5000,1) - 训练轮次太少:仅训练1轮(
epochs=1),模型没有足够时间学习规律 - 数据生成效率低:用循环计算y_train可以直接用numpy向量化操作替代,更高效
修正后的代码
import numpy as np import tensorflow as tf from tensorflow import keras from keras import layers # 构建模型(保留原有网络结构) inputs = keras.Input(shape=(1,)) x = layers.Dense(64, activation="relu")(inputs) x2 = layers.Dense(64, activation="relu")(x) outputs = layers.Dense(1)(x2) # 回归任务输出层用线性激活(默认) model = keras.Model(inputs=inputs, outputs=outputs, name="regression_model") # 生成训练数据:用numpy向量化操作,调整为标准形状 x_train = np.random.rand(5000, 1) # (样本数, 特征数) y_train = x_train ** 2 # 直接向量化计算,无需循环 # 编译模型:改用回归损失函数和合适的指标 model.compile( loss=keras.losses.MeanSquaredError(), # 回归任务首选均方误差 optimizer=keras.optimizers.RMSprop(), metrics=["mean_absolute_error"], # 用回归指标替代准确率 ) # 训练模型:增加训练轮次 history = model.fit(x_train, y_train, batch_size=10, epochs=50, verbose=1) # 生成测试数据并评估 x_test = np.random.rand(50000, 1) y_test = x_test ** 2 test_scores = model.evaluate(x_test, y_test, verbose=2) print("Test loss (MSE):", test_scores[0]) print("Test MAE:", test_scores[1]) # 可选:验证模型预测效果 sample_x = np.array([[0.2], [0.5], [0.8]]) sample_y = sample_x ** 2 predicted_y = model.predict(sample_x) print("\n样本验证:") for x_true, y_true, y_pred in zip(sample_x, sample_y, predicted_y): print(f"x={x_true[0]:.2f}, 真实y={y_true[0]:.4f}, 预测y={y_pred[0]:.4f}")
修正后效果说明
- 训练时会看到损失值(MSE)逐渐下降,说明模型在学习y=x²的规律
- 测试时用
mean_absolute_error(平均绝对误差)评估模型预测精准度,数值越小说明预测越准确 - 样本验证部分可以直观看到模型对具体x值的预测结果,会接近真实的x²值
内容的提问来源于stack exchange,提问作者Mojtaba Jalili
相关产品推荐
相关产品推荐

