【机器学习】 - TensorFlow.Keras 建立模型 model.evaluate 和 model.predict 的区别

本文详细解析了Keras框架下model.evaluate和model.predict两个关键函数的区别与应用场景。evaluate函数用于评估模型,输入数据和真实标签,输出损失值和指标值;predict函数则用于生成模型对输入数据的预测结果,无需真实标签参与。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

 

model.evaluate

函数原型:

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)

输入数据和标签,输出损失值和选定的指标值(如精确度accuracy)

	# 评估模型,不输出预测结果
	loss,accuracy = model.evaluate(X_test,Y_test)
	print('\ntest loss',loss)
	print('accuracy',accuracy)

另外,返回了多少个值,是不固定的,如果在complie的时候没有指定metrics的话,默认只有loss一个返回值。

可以使用model.metrics_names查看。

model.predict

输入测试数据,输出预测结果
(通常用在需要得到预测结果的时候,比如需要拿到结果来画图)

 

二、区别


1.输入输出不同
model.evaluate      输入数据(data)和真实标签(label),然后将预测结果与真实标签相比较,得到两者误差并输出.
model.predict         输入数据(data),输出预测结果
2
是否需要真实标签
model.evaluate       需要,因为需要比较预测结果与真实标签的误差
model.predict          不需要,只是单纯输出预测结果,全程不需要标签的参与。

 

三、附源码:

Returns the loss value & metrics values for the model in test mode.

Computation is done in batches.

Arguments

x: Numpy array of test data (if the model has a single input), or list of Numpy arrays (if the model has multiple inputs). If input layers in the model are named, you can also pass a dictionary mapping input names to Numpy arrays. x can be None (default) if feeding from framework-native tensors (e.g. TensorFlow data tensors).

y: Numpy array of target (label) data (if the model has a single output), or list of Numpy arrays (if the model has multiple outputs). If output layers in the model are named, you can also pass a dictionary mapping output names to Numpy arrays. y can be None (default) if feeding from framework-native tensors (e.g. TensorFlow data tensors).
batch_size: Integer or None. Number of samples per evaluation step. If unspecified, batch_sizewill default to 32.

verbose: 0 or 1. Verbosity mode. 0 = silent, 1 = progress bar.

sample_weight: Optional Numpy array of weights for the test samples, used for weighting the loss function. You can either pass a flat (1D) Numpy array with the same length as the input samples (1:1 mapping between weights and samples), or in the case of temporal data, you can pass a 2D array with shape (samples, sequence_length), to apply a different weight to every timestep of every sample. In this case you should make sure to specifysample_weight_mode="temporal" in compile().

steps: Integer or None. Total number of steps (batches of samples) before declaring the evaluation round finished. Ignored with the default value of None.
Returns

Scalar test loss (if the model has a single output and no metrics) or list of scalars (if the model has multiple outputs and/or metrics). The attribute model.metrics_names will give you the display labels for the scalar outputs.

参考链接:https://blog.csdn.net/DoReAGON/article/details/88552348

Keras官方文档:https://keras.io/models/model/#evaluate

`tf.keras.Model` 是 TensorFlow Keras API 中的一个核心类,它代表了一个完整的机器学习模型。通过继承这个类,你可以轻松地创建自定义模型,并且能够方便地管理训练复杂的深度学习架构。下面将详细介绍 `tf.keras.Model` 的基本功能及其使用方法。 ### 创建自定义模型 当你从 `tf.keras.Model` 继承并重写其中的一些关键方法时,就可以构建自己的定制化模型了。最常用的方法包括: - **\_\_init\_\_(self)**:初始化阶段设置好各层、优化器其他配置项。 ```python class MyModel(tf.keras.Model): def __init__(self): super(MyModel, self).__init__() self.dense1 = tf.keras.layers.Dense(64, activation='relu') self.dense2 = tf.keras.layers.Dense(10) ``` - **call(self, inputs, training=None, mask=None)**:这是前向传播的核心部分,在此函数内部实现了如何接收输入张量并通过网络逐步传递得到输出的过程。需要注意的是,当模型处于评估模式而不是训练模式时,应相应调整某些行为(比如 Batch Normalization 层的行为)。 ```python def call(self, inputs): x = self.dense1(inputs) return self.dense2(x) ``` ### 使用内置高层API快速搭建模型 除了手动编写子类之外,Keras 提供了一些更便捷的方式来构造简单的顺序型(Sequential)、函数式(Functional API)以及其他类型的模型。对于大多数常见任务来说,直接利用这些工具往往已经足够满足需求而无需深入到较低级别的细节当中去了。 #### 序列模型 (Sequential Model) 适用于堆叠单一线性层次结构的情况: ```python model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(10), ]) ``` #### 函数式 API (Functional API) 允许建立更加灵活非线性的连接关系: ```python inputs = tf.keras.Input(shape=(784,)) x = tf.keras.layers.Dense(64, activation="relu")(inputs) outputs = tf.keras.layers.Dense(10)(x) model = tf.keras.Model(inputs=inputs, outputs=outputs) ``` ### 训练与推理 一旦完成了模型的设计工作之后,接下来就是对其进行编译、拟合数据集以及做出预测等常规步骤了。`tf.keras.Model` 类同样提供了多种实用的方法帮助用户高效完成上述流程: - **compile(optimizer, loss, metrics=None, ...)** : 设置训练过程所需的参数。 - **fit(x, y, batch_size=None, epochs=1,...)** :执行具体的迭代更新规则直至达到设定轮次为止;还可以传入验证集来进行交叉检验。 - **evaluate(x, y, batch_size=None,...)** : 测试整体性能指标得分情况。 - **predict(x, batch_size=None,**...): 对新样本点作出分类或者回归估计值。 总之,无论是初学者还是资深开发者都能借助于 `tf.keras.Model` 来简化开发难度同时保持灵活性。希望以上的介绍对你有所帮助!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值