我正在尝试使用由keras构建的简单TensorFlow模型进行试验,但是我无法弄清楚为什么我得到如此差的预测。这是模型:
x_train = np.asarray([[.5], [1.0], [.4], [5], [25]])
y_train = np.asarray([.25, .5, .2, 2.5, 12.5])
opt = keras.optimizers.Adam(lr=0.01)
model = Sequential()
model.add(Dense(1, activation="relu", input_shape=(x_train.shape[1:])))
model.add(Dense(9, activation="relu"))
model.add(Dense(1, activation="relu"))
model.compile(loss='mean_squared_error', optimizer=opt, metrics=['mean_squared_error'])
model.fit(x_train, y_train, shuffle=True, epochs=10)
print(model.predict(np.asarray([[5]])))
如您所见,它应该学会将输入除以二。但是损失是32.5705
,在几个时期内,它拒绝更改任何内容(即使我像100个时期那样疯狂地做,也总是那次损失)。您能看到我在这里做错什么吗?似乎任何值的预测都是0.
。
似乎也正在按预期执行和上述怪异行为之间随机切换。我重新运行它,并在200个周期后丢失了0.0019
,但是如果我在一秒钟后使用所有相同的参数重新运行它,则损失会像以前一样保持在30。这是怎么回事?
答案 0 :(得分:1)
我能想到的一些原因
根据我的评论,我对您的代码进行了一些更改,并获得了不错的结果。
import keras
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
x_train = np.random.random((50000, 1))#np.asarray([[.5], [1.0], [.4], [5], [25]])
y_train = x_train /2. #TODO: add small amount of noise to y #np.asarray([.25, .5, .2, 2.5, 12.5])
opt = keras.optimizers.Adam(lr=0.0005, clipvalue=0.5)
model = Sequential()
model.add(Dense(1, activation="tanh", input_shape=x_train.shape[1:]))
model.add(Dense(9, activation="tanh"))
model.add(Dense(1, activation=None))
model.compile(loss='mean_squared_error', optimizer=opt, metrics=['mean_squared_error'])
model.fit(x_train, y_train, shuffle=True, epochs=10)
print(model.predict(np.asarray([.4322])))
输出:
[[0.21410337]]