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

使用神经网络学习5的乘法表结果异常,是否需要更换ReLU激活函数?

你出现的问题由多个错误导致,不只是激活函数的问题,具体错误和修正方案如下:

核心错误点

  • 输出层维度不匹配:你需要预测的是单个数值,最终输出层应该设置为Dense(1),而不是10个神经元。你当前的输出是10维向量,和标签Y的一维结构完全不匹配,这是预测结果偏差大的核心原因。
  • 评估指标选择错误:accuracy是分类任务的专用评估指标,你当前做的是连续值预测的回归任务,该指标没有任何参考意义,显示为0属于正常现象,你只需要关注MSE损失的下降情况即可。
  • 训练轮次不足:当前仅训练10轮,从损失变化趋势来看模型还远未收敛,需要增加训练轮次。
  • 损失函数认知错误:你代码注释里提到的交叉熵损失是分类任务专用,完全不适合当前回归场景,继续使用MSE即可。

激活函数相关说明

对于乘5这种纯线性映射任务,你当前使用的ReLU完全可以满足需求,不需要特意更换其他激活函数。如果想进一步简化模型,甚至可以直接去掉所有隐藏层的激活函数,仅用线性变换就能完美拟合目标规则。

修正后的可运行代码

import random
import numpy as np
from keras.models import Sequential
from tensorflow.keras.layers import Dense

# 构造数据集
X = []
Y = []
for i in range(10000):
    n = random.randint(0, 300)
    X.append(n)
    Y.append(n*5)
X = np.array(X)
Y = np.array(Y)

# 搭建模型
model = Sequential()
model.add(Dense(10, activation='relu', input_shape=(1,)))
model.add(Dense(10, activation='relu'))
# 修正输出层为1个神经元,默认使用线性激活
model.add(Dense(1))
# 去掉无用的accuracy指标
model.compile(loss='MSE', optimizer='adam')
# 增加训练轮次到100轮保证收敛
model.fit(X, Y, batch_size=50, validation_split=0.05, epochs=100, verbose=1, shuffle=True)

# 测试
test_array=np.array([4,27,100,121,9])
print(model.predict(test_array))

运行修正后的代码,最终预测结果会和你预期的x*5输出几乎完全一致,误差可以忽略不计。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:30:00