gpt4 book ai didi

python - 神经网络不学习乘法(玩具示例)

转载 作者:行者123 更新时间:2023-11-30 08:58:22 25 4
gpt4 key购买 nike

玩具数据集

  • 输入:两个整数:ab
  • 输出:单个整数,应该是ab的乘积
  • 8000 个训练示例

我的X_train示例:

    array([[ 6220, 15403],
[ 3197, 8054],
[ 1723, 3711],
...,
[ 9500, 14979],
[ 2642, 16547],
[15169, 19332]], dtype=int64)

我的Y_train示例:

    array([ 95806660,  25748638,   6394053, ..., 142300500,  43717174,
293247108], dtype=int64)

型号

    def get_model():
model = Sequential()
model.add(Dense(20, input_shape=(2,), kernel_initializer='normal', activation='linear'))
model.add(LeakyReLU(alpha=.001))
model.add(Dense(20, kernel_initializer='normal', activation='linear'))
model.add(LeakyReLU(alpha=.001))
model.add(Dense(20, kernel_initializer='normal', activation='linear'))
model.add(LeakyReLU(alpha=.001))
model.add(Dense(20, kernel_initializer='normal', activation='linear'))
model.add(LeakyReLU(alpha=.001))
model.add(Dense(1, activation=None))
model.compile(loss='mean_squared_error', optimizer='adam')
return model

estimator = KerasRegressor(build_fn=get_model, epochs=20, batch_size=20, verbose=1)
estimator.fit(np.array(X_train), np.array(Y_train))

问题

它似乎在几个时期后就收敛了,伴随着巨大的训练损失:

Epoch 1/20
8000/8000 [==============================] - 3s 378us/step - loss: 8970757661335224.0000
Epoch 2/20
8000/8000 [==============================] - 1s 187us/step - loss: 1368236980395048.7500
Epoch 3/20
8000/8000 [==============================] - 2s 189us/step - loss: 731455474934743.0000
Epoch 4/20
8000/8000 [==============================] - 2s 200us/step - loss: 731256021644738.6250
Epoch 5/20
8000/8000 [==============================] - 2s 209us/step - loss: 729734634673274.8750
Epoch 6/20
8000/8000 [==============================] - 2s 215us/step - loss: 730761901553746.0000
Epoch 7/20
8000/8000 [==============================] - 2s 224us/step - loss: 729841294691532.7500
Epoch 8/20
8000/8000 [==============================] - 2s 235us/step - loss: 728911536487137.2500
Epoch 9/20
8000/8000 [==============================] - 2s 229us/step - loss: 731467433524592.6250
Epoch 10/20

我尝试了什么?

  • 不同的学习率,学习率衰减
  • 或多或少的隐藏层/隐藏单元
  • 不同的激活函数(→ ReLU、Leaky ReLU)
  • 仔细检查我的输入和标签(→ 似乎是正确的)

所有这些行动都不会改善损失。使用较少的层会使结果变得更糟。

编辑

如果有人想尝试一下 – 我创建了一个(IPython/Google Colab)笔记本 here .

我现在也尝试过:

  • 使用 glorot_normal 初始化 → 无显着变化
  • 通过 sc.fit_transform(dataset) 使用 sklearn.preprocessing.StandardScaler 进行归一化,并使用 sc.inverse_transform(result) 进行推理 → 改进自~ 7.3e14 至 ~ 2.0e11
  • 不同的批量大小 → 无显着变化
  • 更多数据 → 16.000 个示例 → 从 ~ 2.0e11 到 ~ 1.0e11 略有改进
  • 通过 math.log 进行标准化(这使得 c = a * blog(c) = log(a) + log(b) code>,使用 exp(predicted) 进行推理 → 看起来更好 → 1.02e9,但在乘法这样的简单任务上仍然远非准确

最佳答案

对数据(输入输出)进行标准化,使其均值和单位方差为零。

第二步,将初始化程序更改为 glorot_normal 之类的内容。

关于python - 神经网络不学习乘法(玩具示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com