tf.keras.Model

概述

类tf.keras.Model,将layers分组为具有训练和推理特征的对象

函数式编程一般用此类

子类有 tf.keras.Sequential

主要方法

初始化

__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包下
    提供以下优化方法:
  • loss=None:损失函数,传入 函数名 或 实例。在tf.losses包下。更多损失函数点击链接
    • 如果有多个输出,则通过传递 dict 或 list 为每个输出使用不同的损失函数。此时,损失值是模型最小化损失值的和。见案例
  • metrics=None:训练时指定的评估函数,详细点击。执行fit()方法后,返回的history对象中包含该度量值。

    • 逻辑回归通常使用metrics=['accuracy'](accuracy也可简写acc)。

    • 线性回归通常使用metrics=['mae']或metrics=['mse']

    • 如果是多输出模型时,为每个输出指定不同的度量标准:

      • 传递字典,例如 metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。(output_a、output_b必须是模型中layer的name,见案例)

      • 传递列表,如metrics=[['accuracy'], ['accuracy', 'mse']]或 metrics=['accuracy', ['accuracy', '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.html

  • verbose: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()

将模型的整个状态保存在单个文件中,包含:

  1. 模型架构
  2. 模型权重
  3. 优化器配置。可以从上次中断的地方继续训练

可以通过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


原文出处:/show_1EF4BCMB2wb1.html