我从 .json 和 .hdf5 文件加载 Keras 模型 . 当我调用 model.evaluate() 时,它会返回一个错误:
Keras
model.evaluate()
您必须在训练/测试之前编译模型 . 使用`model.compile(优化器,丢失)
为什么我需要编译才能运行 evaluate() ?
evaluate()
要添加,模型可以传递 predict() 没有问题 .
predict()
因为evaluate会计算 loss function and the metrics .
在编译模型之前,您没有任何这些 . 它们是编译方法的参数:
model.compile(optimizer=..., loss=..., metrics=...)
另一方面,predict不评估任何度量或损失,它只是通过模型传递输入数据并获取其输出 .
你也需要“损失”进行训练,所以你不能在没有编译的情况下进行训练 . 您可以根据需要多次编译模型,甚至可以更改参数 .
The outputs and the loss function:
模型的输出取决于它是用权重定义的 . 这是自动的,即使没有经过任何培训,您也可以从任何模型中获得 . Keras的每个模型都已经生成了权重(由您初始化或随机初始化)
你输入一些东西,模型计算输出 . 最重要的是,这一切都很重要 . 一个好的模型具有适当的权重并正确输出内容 .
但在达到目的之前,您的模型需要接受培训 .
现在,loss函数获取当前输出并将其与期望/真实结果进行比较 . 这是一个应该最小化的功能 . 损失越少,结果越接近预期 . 这是从中获取导数的函数,因此反向传播算法可以更新权重 .
损失函数对于模型的最终目的没有用,但它对培训是必要的 . 这可能就是为什么你可以拥有没有损失函数的模型(因此,没有办法评估它们) .
1 回答
因为evaluate会计算 loss function and the metrics .
在编译模型之前,您没有任何这些 . 它们是编译方法的参数:
另一方面,predict不评估任何度量或损失,它只是通过模型传递输入数据并获取其输出 .
你也需要“损失”进行训练,所以你不能在没有编译的情况下进行训练 . 您可以根据需要多次编译模型,甚至可以更改参数 .
The outputs and the loss function:
模型的输出取决于它是用权重定义的 . 这是自动的,即使没有经过任何培训,您也可以从任何模型中获得 . Keras的每个模型都已经生成了权重(由您初始化或随机初始化)
你输入一些东西,模型计算输出 . 最重要的是,这一切都很重要 . 一个好的模型具有适当的权重并正确输出内容 .
但在达到目的之前,您的模型需要接受培训 .
现在,loss函数获取当前输出并将其与期望/真实结果进行比较 . 这是一个应该最小化的功能 . 损失越少,结果越接近预期 . 这是从中获取导数的函数,因此反向传播算法可以更新权重 .
损失函数对于模型的最终目的没有用,但它对培训是必要的 . 这可能就是为什么你可以拥有没有损失函数的模型(因此,没有办法评估它们) .