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

时间:2017-06-30 09:51:05

标签: tensorflow model keras evaluate

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

model.fit()model.evaluate()之间有什么关系?理想情况下我应该使用哪一个? (截至目前我正在使用model.fit())。

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

  

用于评估模型。

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

4 个答案:

答案 0 :(得分:14)

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 :(得分:1)

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

您的训练集将传递到您对df$group <- factor(df$group) library(plotly) library(dplyr) plotly::plot_ly(df,showlegend=T) %>% plotly::add_bars(x=~x,y=~y,width=~width,color=~group) %>% plotly::layout(legend=list(x=1,y=0)) %>% plotly::layout(xaxis=list(title=NA,zeroline=F,tickangle=45,range=x.range,tickvals=df$x,ticktext=df$name),yaxis=list(title=NA,zeroline=F,showgrid=F,range=c(0,1),showticklabels=F)) 的呼叫中,而您的测试集将传递到您对fit()的呼叫中。在拟合操作期间,您的训练数据的许多行将被馈入您的神经网络(基于批次大小)。发送完每批之后,拟合算法会进行反向传播以调整神经网络中的权重。

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

答案 2 :(得分:0)

fit():针对给定的时期数训练模型(这是针对训练时间,带有训练数据集)。

predict():为输入样本生成输出预测(这是在训练和测试时间之间的某个时间)。

evaluate():返回测试模式下模型的损失值和指标值(用于测试时间,带有测试数据集)。

答案 3 :(得分:0)

虽然以上所有答案都解释了这些功能:fit(),evaluate()或predict(),但是我要记住的更重要的一点是,应该为fit()和evaluate()使用哪些数据。

我在Machine Learning Mastery中遇到的最清晰的指导原则以及其中的特殊引文:

训练集:一组用于学习的示例,它适合分类器的参数。

验证集:一组用于调整分类器参数的示例,例如,选择神经网络中隐藏单元的数量。

测试集:一组示例,仅用于评估完全指定的分类器的效果。

Brian Ripley,第354页,模式识别和神经网络,1996年

您不应使用用于训练(调整)模型(验证数据)的相同数据来评估经过完全训练的模型(评估)的性能(概括)。

用于评估()的测试数据应该不可见/不用于训练(fit()),以便成为模型评估(用于生成)的任何可靠指标。

对于Predict(),您可以仅使用一个或几个您选择的示例(从任何地方),以快速从模型中进行检查或回答。我不认为它可以用作泛化的唯一参数。