摄氏到华氏转换简单的神经网络

数据挖掘 神经网络
2022-02-21 13:28:28

这个常见的例子是涉足最基本的神经网络(即两个神经元,一个输入和一个输出)的简单方法。

我一直在使用 TensorFlow 和 keras 来解决这个问题,我想知道,对于 NN 来说,学习权重 (1.8) 和偏差 (32) 应该非常简单,而且几乎不费吹灰之力。

但是,我发现(尽管仅使用 13 个示例)在运行 500 个 epoch 后,我可以获得 1.8 的权重,但偏差始终关闭(例如,29.2)。鉴于这个线性问题,显然没有激活函数。

我的问题是,对于这样一个简单的情况,神经网络能否准确解决这个问题?

1个回答

不看代码很难说,但我可以想象几个原因:

  • 您正在使用激活函数。您想要“线性”或不激活
  • 学习率太低
  • 错误的网络(应该是一个具有一个权重的密集层)
  • 批量大小不佳

这非常有效:

from tensorflow.keras.layers import Dense
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers import Nadam

model = Sequential([Dense(1, activation=None, input_shape=[1])])
model.compile(loss='mean_squared_error', optimizer=Nadam(lr=0.1), metrics=['mean_absolute_error'])

F = list(range(-200,200))
C = [(f - 32) * 5 / 9 for f in F]

model.fit(F, C, batch_size=16, epochs=50)

print(model.predict(np.array([300])))
print(model.layers[0].get_weights())
[[148.88893]]
[array([[0.5555556]], dtype=float32), array([-17.777737], dtype=float32)]

300 F -> 148.8889 C,很好,它知道转换是 C = 5/9 * F - 17.7778,或 C = 5/9 * (F - 32)