Keras损失极高

Sta*_*kov 3 prediction loss keras

我试图通过特征预测价格。我选择了一个非常简单的模型,但它的工作原理很奇怪。损失函数非常高,我看不出问题出在哪里。

这是我的模型:

# define base model
def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(62, input_dim = 62, kernel_initializer='normal', activation='relu'))
    model.add(Dense(31, kernel_initializer='normal', activation='relu'))
    model.add(Dense(15, kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, kernel_initializer='normal'))
    # Compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model
Run Code Online (Sandbox Code Playgroud)

这就是我准备数据的方式:(一次热,我拆分了所有数据以进行训练和测试)

df = encode_onehot(dataframe, cols=['Shape', 'Cut', 'Color', 'Clarity', 'Polish', 'Symmetry', 'Culet', '\tFluorescence'])

dataset = df.values
X = dataset[1:,4:66]
Y = dataset[1:,2]

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25, random_state=42)
Run Code Online (Sandbox Code Playgroud)

最后,培训:

baseline_model().fit(X_train, y_train, epochs=10, batch_size=64)
scores = baseline_model().evaluate(X_test, y_test, verbose=0)
print(baseline_model().summary())
Run Code Online (Sandbox Code Playgroud)

结果非常可悲:

Epoch 1/10
149767/149767 [==============================] - 4s - loss: 104759338.0333     
Epoch 2/10
149767/149767 [==============================] - 4s - loss: 104594236.9627     
Epoch 3/10
149767/149767 [==============================] - 4s - loss: 104556662.2948     
Run Code Online (Sandbox Code Playgroud)

而且并没有变得更好。

我究竟做错了什么?

Soo*_*raj 5

正如@ Yu-Yang所说,您使用均方误差作为损失函数。在损失值将非常大之前,我遇到了同样的问题,将损失函数更改为mean_squared_logarithmic_error,就得到了预期的结果。

model %>% compile(
optimizer = optimizer_rmsprop(lr=0.0001),
loss = loss_mean_squared_logarithmic_error,
metrics = c("accuracy")
)
Run Code Online (Sandbox Code Playgroud)

损失值更改为

时代1/10
326981/326981 [==============================]-17秒-损失:0.0048-累计:0.9896

希望这对您有用!

  • 他?我可能会出错,但如果你从 MSE 切换到日志错误风格,当然你会得到一个较低的值,但你永远不应该比较这两个值,因为它们的规模完全不同。因此,如果您的模型在使用损失“均方对数误差”训练后产生的预测误差比使用 MSE 训练后的预测误差更少(和/或更小),那么这将是一个很好的指标,表明使用对数版本进行训练更好,但除此之外,它只是美观地显示较小的数字,这可能会让您更加平静。 (2认同)