需要在`model.evaluate()`之前编译Keras模型

bho*_*ass 12 keras

我打开一个Keras从模型以.json.hdf5文件.当我调用时model.evaluate(),它返回一个错误:

您必须在训练/测试之前编译模型.使用`model.compile(优化器,丢失)

为什么我需要编译才能运行evaluate()

要添加,模型可以predict()毫无问题地传递.

Dan*_*ler 17

因为evaluate会计算损失函数和指标.

在编译模型之前,您没有任何这些.它们是编译方法的参数:

model.compile(optimizer=..., loss=..., metrics=...) 
Run Code Online (Sandbox Code Playgroud)

另一方面,predict不评估任何度量或损失,它只是通过模型传递输入数据并获得其输出.

你也需要"损失"进行训练,所以你不能在没有编译的情况下进行训练.您可以根据需要多次编译模型,甚至可以更改参数.


输出和损失函数:

模型的输出取决于它是用权重定义的.这是自动的,你可以predict从任何模型,即使没有任何培训.Keras的每个模型都已经生成了权重(由您初始化或随机初始化)

你输入一些东西,模型计算输出.最重要的是,这一切都很重要.一个好的模型具有适当的权重并正确输出内容.

但在达到目的之前,您的模型需要接受培训.

现在,loss函数获取当前输出并将其与期望/真实结果进行比较.这是一个应该最小化的功能.损失越少,结果越接近预期.这是从中获取导数的函数,因此反向传播算法可以更新权重.

损失函数对于模型的最终目的没有用,但它对培训是必要的.这可能就是为什么你可以拥有没有损失函数的模型(因此,没有办法评估它们).