概述
类tf.keras.Model,将layers分组为具有训练和推理特征的对象
函数式编程一般用此类
主要方法
初始化
__init__(
*args,
**kwargs
)
参数
- inputs:list类型,多个输入
- outputs:list类型,多个输出
返回
- Model对象
summary()
显示摘要信息
compile()
编译,配置模型用于训练
运行时可将Keras代码翻译为后台代码以执行学习、评估等后续操作
compile(
optimizer,
loss=None,
metrics=None,
loss_weights=None,
sample_weight_mode=None,
weighted_metrics=None,
target_tensors=None,
distribute=None,
**kwargs
)
参数说明
- optimizer:优化方法,传入 优化程序的名称 或 实例。优化方法在
tf.keras.optimizers包下
提供以下优化方法:- adam
更多 点击
- adam
- loss=None:损失函数,传入 函数名 或 实例。在
tf.losses包下。更多损失函数点击链接- 如果有多个输出,则通过传递 dict 或 list 为每个输出使用不同的损失函数。此时,损失值是模型最小化损失值的和。见案例
metrics=None:训练时指定的评估函数,详细点击。执行fit()方法后,返回的history对象中包含该度量值。
逻辑回归通常使用
metrics=['accuracy'](accuracy也可简写acc)。线性回归通常使用
metrics=['mae']或metrics=['mse']如果是多输出模型时,为每个输出指定不同的度量标准:
- loss_weights=None:
- sample_weight_mode=None:
- weighted_metrics=None:
- target_tensors=None:
- distribute=None:
- **kwargs:
fit()
进行训练
fit(
x=None,
y=None,
batch_size=None,
epochs=1,
verbose=1,
callbacks=None,
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_freq=1,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
**kwargs
)
参数说明
x:输入数据,类型:numpy数组、TensorFlow张量等
y:目标数据,类型:numpy数组、TensorFlow张量等
batch_size:整数 或 None(默认值32),训练batch_size个样本时,就会计算一次梯度下降,使目标函数优化一步
epochs:训练的次数
steps_per_epoch:值为正数,执行多少是一个循环,当输入数据无限循环时使用。默认值None
例子:https://www.malaoshi.top/show_1EF47rSHdidH.htmlverbose:0为不在标准输出流输出日志信息,1为输出进度条记录,2为每个epoch输出一行记录
callbacks:list,其中的元素是keras.callbacks.Callback的对象。这个list中的 回调函数 将会在训练过程中的适当时机被调用
validation_split:0~1之间的浮点数,用来指定训练集的一定比例数据作为验证集。验证集将不参与训练,并在每个epoch结束后测试的模型的指标,如损失函数、精确度等。注意,validation_split的划分在shuffle之后,因此如果你的数据本身是有序的,需要先手工打乱再指定validation_split,否则可能会出现验证集样本不均匀。
validation_data:指定的验证集。此参数将覆盖validation_spilt。tuple类型,如下:
- (x,y)
- (x,y,sample_weights)
shuffle:布尔值,表示是否在训练过程中每个epoch前随机打乱输入样本的顺序。
class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)。该参数在处理非平衡的训练数据(某些类的训练样本数很少)时,可以使得损失函数对样本数不足的数据更加关注。
sample_weight:权值的numpy array,用于在训练时调整损失函数(仅用于训练)。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode=‘temporal’。
initial_epoch: 从该参数指定的epoch开始训练,在继续之前的训练时有用。
steps_per_epoch: 一个epoch包含的步数(每一步是一个batch的数据送入),当使用如TensorFlow数据Tensor之类的输入张量进行训练时,默认的None代表自动分割,即数据集样本数/batch样本数。
validation_steps: 仅当steps_per_epoch被指定时有用,在验证集上的step总数。
返回值
predict()
预测。模型训练好后,进行预测
predict(
x,
batch_size=None,
verbose=0,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
参数说明:
- x:输入样本,类型:numpy数组,TensorFlow 张量等
返回值
- Numpy数组
evaluate()
对 测试数据 进行评测,返回 损失值 和 度量值
度量值:在compile()的metrics中设置
evaluate(
x=None,
y=None,
batch_size=None,
verbose=1,
sample_weight=None,
steps=None,
callbacks=None,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
参数说明:
- x:样本特征数据
- y:与样本对应的目标数据
- batch_size:整数,含义同fit的同名参数
- verbose:含义同fit的同名参数,但只能取0或1
- sample_weight:numpy array,含义同fit的同名参数
本函数返回一个测试误差的标量值(如果模型没有其他评价指标),或一个标量的list(如果模型还有其他的评价指标)。model.metrics_names将给出list中各个值的含义。
返回:
损失值 和 度量值
save()
将模型的整个状态保存在单个文件中,包含:
- 模型架构
- 模型权重
- 优化器配置。可以从上次中断的地方继续训练
可以通过load_model()加载,参见:keras加载模型
save(
filepath,
overwrite=True,
include_optimizer=True,
save_format=None
)
参数:
- filepath:保存的文件路径
- overwrite:是否覆盖,默认为True
- include_optimizer:是否包含优化器
- save_format:文件格式,
"tf"或"h5""tf":将模型保存成Tensorflow格式,生成一系列文件,保存到filepath文件夹"h5":将模型保存成一个HDF5文件,该文件名为:filepath
当前默认值为’h5’,但在TensorFlow 2.0中将切换为’tf’。“ tf”选项当前处于禁用状态(tf.keras.experimental.export_saved_model改为使用)
例子:
推荐保存成h5,这样只有一个文件
model.save('model.h5',save_format="h5")
save_weights()
保存所有图层权重
基于自save()方法的save_format形参实现,以HDF5或TensorFlow格式保存
以HDF5格式保存时,权重文件具有:-(layer_names属性),字符串列表(模型层的有序名称)
save_weights(
filepath,
overwrite=True,
save_format=None
)
参数:
- filepath:保存文件路径。
- overwrite:是否覆盖
- save_format:“ tf”或“ h5”
load_weights()
加载权重
load_weights(
filepath
)
参数:
- filepath:加载的文件路径
to_json()
返回包含 模型 配置的JSON字符串
仅包含模型架构,但 没有权重,没有配置优化器
to_json()
返回值:
- 返回包含网络配置的JSON字符串
通过下面函数重建模型keras.models.model_from_json(json_string, custom_objects={})
train_on_batch
传入一批数据,训练并进行梯度更新
train_on_batch(
x,
y=None,
sample_weight=None,
class_weight=None,
reset_metrics=True
)
参数
- x: 输入数据。它可能是:
- Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入)。
- TensorFlow张量或张量 list(如果模型具有多个输入)。
- 如果模型已命名输入,则dict将输入名称映射到相应的数组/张量。
- 一个tf.data数据集。
- y:目标数据。与x一样,可以是Numpy数组或TensorFlow张量。与 x 一致。如果 x是dataset ,则y不应指定(因为将从 dataset 迭代器获取)。
- sample_weight:与x长度相同的可选数组,其中包含权重以应用于每个样本的模型损失。对于时间数据,您可以传递具有形状(样本,sequence_length)的2D数组,以对每个样本的每个时间步施加不同的权重。在这种情况下,您应确保在compile()中指定sample_weight_mode =“ temporal”。x是数据集时不支持此参数。
- class_weight:可选的字典映射类索引(整数)到权重(浮点数),以应用于训练过程中该类样本的模型损失。这有助于告诉模型“更多关注”来自代表性不足的类的样本。
- reset_metrics:如果为True,返回的指标仅适用于该批次。如果为False,则指标将有状态地跨批次累积。
例子
在faster rcnn中使用该方法,因为faster rcnn用于训练的数据较多,所以是一张图片进行一次训练
感谢:
https://blog.csdn.net/qq_41007606/article/details/83183452