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

Abh*_*aji 16 model evaluate keras tensorflow

我是机器学习的新手,我正在使用Keras和TensorFlow后端来训练CNN模型.

有人可以解释之间的差异model.fit(),并model.evaluate()和我理想情况下应该使用哪一个?(我现在正在使用model.fit()).

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

它用于评估模型.

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

提前致谢.:)

vij*_*y m 18

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在让我们在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]
Run Code Online (Sandbox Code Playgroud)


ran*_*ath 7

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

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

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