model.fit()和Keras中的model.evaluate()有什么区别?

问题描述 投票:11回答:3

我正在使用带有TensorFlow后端的Keras来训练CNN模型。

model.fit()model.evaluate()之间有什么关系?理想情况下我应该使用哪一个? (我现在使用的是model.fit())。

我知道model.fit()model.predict()的效用。但我无法理解model.evaluate()的实用性。 Keras文档只是说:

它用于评估模型。

我觉得这是一个非常含糊的定义。

tensorflow model keras evaluate
3个回答
16
投票

fit()用于训练具有给定输入(以及相应的训练标签)的模型。

evaluate()用于使用验证(或测试)数据和相应的标签评估已经训练的模型。返回模型的损失值和指标值。

predict()用于实际预测。它为输入样本生成输出预测。

让我们考虑一个简单的回归示例:

# input and output
x = np.random.uniform(0.0, 1.0, (200))
y = 0.3 + 0.6*x + np.random.normal(0.0, 0.05, len(y))

enter image description here

现在让我们在keras中应用回归模型:

# A simple regression model
model = Sequential()
model.add(Dense(1, input_shape=(1,)))
model.compile(loss='mse', optimizer='rmsprop')

# The fit() method - trains the model
model.fit(x, y, nb_epoch=1000, batch_size=100)

Epoch 1000/1000
200/200 [==============================] - 0s - loss: 0.0023

# The evaluate() method - gets the loss statistics
model.evaluate(x, y, batch_size=200)     
# returns: loss: 0.0022612824104726315

# The predict() method - predict the outputs for the given inputs
model.predict(np.expand_dims(x[:3],1)) 
# returns: [ 0.65680361],[ 0.70067143],[ 0.70482892]

1
投票

fit():为给定数量的历元训练模型(这是用于训练时间,使用训练数据集)。

predict():为输入样本生成输出预测(这适用于训练和测试时间之间的某处)。

evaluate():返回测试模式下模型的损耗值和度量值(这是测试时间,使用测试数据集)。


1
投票

在深度学习中,您首先要训练您的模型。您获取数据并将其分为两组:训练集和测试集。 80%的数据进入您的训练集并且20%进入您的测试集似乎很常见。

您的训练集将传递到您对fit()的调用中,您的测试集将传递到您对evaluate()的调用中。在拟合操作期间,您的训练数据的多行被输入您的神经网络(基于您的批量大小)。在发送每个批次之后,拟合算法会进行反向传播以调整神经网络中的权重。

完成此操作后,您的神经网络将被训练。问题是有时你的神经网络会过度拟合,这是一种对训练集表现良好但对其他数据表现不佳的情况。为防止出现这种情况,您可以运行evaluate()函数,通过神经网络发送新数据(测试集),看看它是如何处理从未见过的数据。没有训练发生,这纯粹是一种考验。如果一切顺利,那么训练的分数与测试分数相似。

© www.soinside.com 2019 - 2024. All rights reserved.