不看代码很难说,但我可以想象几个原因:
- 您正在使用激活函数。您想要“线性”或不激活
- 学习率太低
- 错误的网络(应该是一个具有一个权重的密集层)
- 批量大小不佳
这非常有效:
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)