我使用Keras与TensorFlow后端训练CNN模型。
model.fit()和model.evaluate()之间是什么?我应该理想地使用哪一种?(我现在正在使用model.fit() )。
我知道model.fit()和model.predict()的用处。但我无法理解model.evaluate()的效用。Keras文档只是说:
并对模型进行了评价。
我觉得这是一个很模糊的定义。
发布于 2017-06-30 10:01:52
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))

现在,让我们在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]发布于 2019-03-15 22:37:26
在深度学习中,你首先要培养你的模式。您可以将数据分成两组:培训集和测试集。你80%的数据进入你的训练集,20%进入你的测试集,这似乎是相当普遍的。
您的培训集被传递到您对fit()的调用中,测试集被传递到您对evaluate()的调用中。在fit操作期间,您的训练数据中的许多行被输入到您的神经网络中(根据您的批次大小)。在发送每一批之后,fit算法会进行反向传播,以调整神经网络中的权重。
这样做之后,你的神经网络就被训练好了。问题是,有时你的神经网络会变得过分适合,这是一个条件,它表现良好的训练集,但对其他数据不好。为了防止这种情况,您可以运行evaluate()函数,通过神经网络发送新数据(测试集),查看它如何处理从未见过的数据。没有训练发生,这纯粹是一个测试。如果一切顺利,那么训练所得的分数与测试所得的分数是相似的。
发布于 2018-11-30 17:41:57
fit():将模型训练到给定数量的时代(这是用于训练时间,使用训练数据集)。
predict():为输入示例生成输出预测(用于培训和测试时间之间的某个位置)。
value ():返回模型在测试模式下的损失值&度量值(这是用于测试时间的,使用测试数据集)。
https://stackoverflow.com/questions/44843581
复制相似问题