【问题标题】:Keras model.evaluate()Keras model.evaluate()
【发布时间】:2021-01-10 18:58:17
【问题描述】:

我已经使用 Keras 实现了一个神经网络,现在我想尝试输入特征的不同组合并进行超参数调整。 到目前为止,我使用 MSE 作为损失,使用 MAE 作为度量。我的代码如下所示:

#Create the model
model = Sequential()

#Add first hidden layer
model.add(Dense(units=10, input_dim=n_features, activation='relu')) 

#Add output layer
model.add(Dense(units=1, activation='sigmoid'))

model.summary()

model.compile(optimizer='adam', loss='mse', metrics=['mae'])

history = model.fit(x_train, y_train, batch_size=32, epochs=100, validation_data=(x_val, y_val))

result = pd.DataFrame(history.history)
result.head(5)

这给了我每个 epoch 之后的训练损失和 mae,以及验证损失和 mae。

现在,在比较不同的网络时,我想拿一个损失值进行比较。 我不确定我是否可以只使用 model.evaluate() 以及它的作用。

#store and print validation loss and validation mae
val_loss = model.evaluate(x_val, y_val, verbose=0)[0]
val_mae = model.evaluate(x_val, y_val, verbose=0)[1]
print('validation loss (MSE):', val_loss, '\nvalidation MAE:', val_mae)

我从 model.evaluate() 得到的输出与我对所有 100 个 epoch 取最小损失或 MAE 不同。 那么 model.evaluate() 有什么作用呢?

【问题讨论】:

  • 使用早期停止和恢复体重来实现这一目标

标签: python pandas keras


【解决方案1】:

当您训练模型时,keras 会在每个 epoch(数据集的迭代)后记录损失。很有可能在训练期间,您的模型找到了一个很好的最小值(比如在 50 轮),但随后又跳到另一个稍差的最小值(在 99 轮)并在那里停止训练。

如果 NNs 参数(不是超参数)等于 50 个 epoch 中的值,则对所有 100 个 epoch 取最小损失。

model.evaluate() 只是将您的神经网络保持原样(在 epoch 100),计算预测,然后计算损失。

因此,最小损失可能比 model.evaluate() 小(尽管对于良好的超参数只有一点点),但 model.evaluate() 会告诉您您的 NN 当前在哪里。

【讨论】:

    【解决方案2】:

    当您使用 sigmoid 作为最后一个激活函数时,MSE 不是正确的损失函数。

    我建议 'binary_crossentrophy' 或者不要在最后一层使用任何激活函数,而使用 'mse' 作为损失函数。

    -MULTI LABEL CLASSIFICATION
    activation: sigmoid 
    loss: binary_crossentrophy
    
    -MULTI CLASS CLASSIFICATION
    activation: softmax
    loss: categorical_crossentrophy
    
    REGRESSION (-inf, +inf)
    Activation: None
    loss: mse
    

    在类别和标签分类中,您都在检查您的预测正确的次数,而在使用 MSE 时,您正在检查与实际正确值的距离。

    所以这是一种不同类型的测量误差。

    【讨论】:

    • 但是,我处理的是回归问题而不是分类问题。我的预测值需要在 0 到 1 的范围内。因此,我确实认为 sigmoid 作为输出层的激活函数,mse 作为损失函数是合适的。纠正我,如果我错了。
    • 好的,如果你有回归问题,你应该保留激活函数的默认值。
    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 2017-11-12
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多