Tensorflow学习之tf.keras(一) tf.keras.layers.Model(另附compile,fit)

 

继承自:LayerModule

tf.keras.Model(
    *args, **kwargs
)

    参数

 

inputs

  模型的输入:keras.Input 对象或 keras.Input  对象列表。

outputs

模型的输出。 请参阅下面的函数式 API 示例。

name

字符串,模型的名称。

实例化模型有两种方法:

1 - 使用“Functional API”,您从输入开始,链接层调用以指定模型的前向传递,最后根据输入和输出创建模型:

import tensorflow as tf

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

 2 - 通过继承 Model 类:在这种情况下,您应该在 __init__ 中定义您的层,并且您应该在调用中实现模型的前向传递

import tensorflow as tf

class MyModel(tf.keras.Model):

  def __init__(self):
    super(MyModel, self).__init__()
    self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
    self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)

  def call(self, inputs):
    x = self.dense1(inputs)
    return self.dense2(x)

model = MyModel()

如果您对模型进行子类化,您可以选择在调用中有一个训练参数(布尔值),您可以使用它来指定训练和推理中的不同行为:

import tensorflow as tf

class MyModel(tf.keras.Model):

  def __init__(self):
    super(MyModel, self).__init__()
    self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
    self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
    self.dropout = tf.keras.layers.Dropout(0.5)

  def call(self, inputs, training=False):
    x = self.dense1(inputs)
    if training:
      x = self.dropout(x, training=training)
    return self.dense2(x)

model = MyModel()

创建模型后,您可以使用 model.compile() 为模型配置损失和指标,使用 model.fit() 训练模型,或者使用模型使用 model.predict() 进行预测。

    属性

 

distribute_strategy

  这个模型是在 tf.distribute.Strategy下创建的。

layers

 

metrics_names

返回所有输出的模型显示标签

 ★注意:metrics_names 仅在 keras.Model 对实际数据进行训练/评估后可用。

inputs = tf.keras.layers.Input(shape=(3,))
outputs = tf.keras.layers.Dense(2)(inputs)
model = tf.keras.models.Model(inputs=inputs, outputs=outputs)
model.compile(optimizer="Adam", loss="mse", metrics=["mae"])
model.metrics_names
[]
x = np.random.random((2, 3))
y = np.random.randint(0, 2, (2, 2))
model.fit(x, y)
model.metrics_names
['loss', 'mae']
inputs = tf.keras.layers.Input(shape=(3,))
d = tf.keras.layers.Dense(2, name='out')
output_1 = d(inputs)
output_2 = d(inputs)
model = tf.keras.models.Model(
   inputs=inputs, outputs=[output_1, output_2])
model.compile(optimizer="Adam", loss="mse", metrics=["mae", "acc"])
model.fit(x, (y, y))
model.metrics_names
['loss', 'out_loss', 'out_1_loss', 'out_mae', 'out_acc', 'out_1_mae',
'out_1_acc']

run_eagerly

  指示模型是否应急切运行的可设置属性。急切地运行意味着您的模型将逐步运行,就像 Python 代码一样。 您的模型可能运行得较慢,但您应该更容易通过进入各个层调用来调试它。默认情况下,我们会尝试将您的模型编译为静态图以提供最佳执行性能。

 

    方法

 

call

  在新输入上调用模型

compile

配置用于训练的模型

evaluate

返回模型在测试模式下的损失值和指标值

evaluate_generator

在数据生成器上评估模型

fit

训练模型固定数量的时期(数据集上的迭代)

fit_generator

在 Python 生成器逐批生成的数据上拟合模型

get_layer

根据名称(唯一)或索引检索图层。

load_weights

从 TensorFlow 或 HDF5 权重文件加载所有层权重

make_predict_function

创建一个执行一步推理的函数

make_test_function

创建一个执行一个评估步骤的函数

make_train_function

创建一个执行一步训练的函数

predict

为输入样本生成输出预测

predict_generator

为来自数据生成器的输入样本生成预测

predict_on_batch

返回单批样本的预测

predict_step

一个推理步骤的逻辑

reset_metrics

重置模型中所有指标的状态

reset_states

 

save

将模型保存到 Tensorflow SavedModel 或单个 HDF5 文件

save_weights

保存所有图层权重

summary

打印网络的字符串摘要

test_on_batch

在单批样本上测试模型

test_step

一个评估步骤的逻辑

to_json

返回包含网络配置的 JSON 字符串

to_yaml

返回包含网络配置的 yaml 字符串

train_on_batch

对单批数据运行单个梯度更新

train_step

一个训练步骤的逻辑

 compile

compile(
    optimizer='rmsprop', loss=None, metrics=None, loss_weights=None,
    weighted_metrics=None, run_eagerly=None, steps_per_execution=None, **kwargs
)

 配置用于训练的模型

    参数

 

optimizer

  字符串(优化器名称)或优化器实例。 参见 tf.keras.optimizers

loss

字符串(目标函数名称)、目标函数或tf.keras.losses.Loss 实例。参见tf.keras.losses.目标函数是任何具有签名 loss = fn(y_true,y_pred) 的可调用函数,其中 y_true = ground truth values ,shape=[batch_size, d0, .. dN],除了稀疏的损失函数,例如稀疏分类交叉熵,其shape=[batch_size, d0, .. dN-1] 

y_pred = predicted values,其shape=[batch_size, d0, .. dN].它返回一个加权损失浮动张量。如果使用自定义Loss实例并将reduction设置为 NONE,则返回值的形状为 [batch_size, d0, .. dN-1] 即。 每个样本或每个时间步的损失值; 否则,它是一个标量。如果模型有多个输出,您可以通过传递字典或损失列表对每个输出使用不同的损失。模型将最小化的损失值将是所有单个损失的总和。

metrics

模型在训练和测试期间要评估的指标列表。每个都可以是字符串(内置函数的名称)、函数或  tf.keras.metrics.Metric 实例。参见tf.keras.metrics.通常,您将使用 metrics=['accuracy']。函数是任何具有签名result = fn(y_true,y_pred). 的可调用函数。要为多输出模型的不同输出指定不同的度量,您还可以传递一个字典,例如 metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}。您还可以传递指标列表的列表 (len = len(outputs)),例如 metrics=[['accuracy'], ['accuracy', 'mse']]metrics=['accuracy', ['accuracy ', 'mse']]。当您传递字符串 'accuracy''acc' 时,我们会根据所使用的损失函数和模型输出形状选择 tf.keras.metrics.BinaryAccuracytf.keras.metrics.CategoricalAccuracytf.keras.metrics.SparseCategoricalAccuracy中的一个。我们也对字符串 'crossentropy' 和 'ce' 进行了类似的转换。

loss_weights

指定标量系数(Python 浮点数)的可选列表或字典,以对不同模型输出的损失贡献进行加权。模型将最小化的损失值将是所有单个损失的加权总和,由loss_weights系数加权。如果是列表,则预计与模型输出的映射为 1:1。 如果是 dict,则应将输出名称(字符串)映射到标量系数。

weighted_metrics

在训练和测试期间要由 sample_weight 或 class_weight 评估和加权的指标列表

run_eagerly

布尔。 默认为False。 如果为 True,则此模型的逻辑将不会包含在tf.function 中。建议将此保留为 None ,除非您的模型无法在 tf.function中运行。使用tf.distribute.experimental.ParameterServerStrategy时不支持run_eagerly=True

steps_per_execution

int。 默认为 1。在每次 tf.function 调用期间运行的批次数。在单个 tf.function 调用中运行多个批处理可以极大地提高 TPU 或具有大量 Python 开销的小型模型的性能。每次执行最多会运行一个完整的 epoch。 如果传递的数字大于 epoch 的大小,则执行将被截断为 epoch 的大小。请注意,如果 steps_per_execution 设置为 N,则 Callback.on_batch_begin  和 Callback.on_batch_end  方法将仅每 N 批调用一次(即在每次tf.function执行之前/之后)。

**kwargs

仅支持向后兼容的参数

fit

View source

fit(
    x=None, 
	y=None, 
	batch_size=None, 
	epochs=1, 
	verbose='auto',
	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_batch_size=None, 
	validation_freq=1,
    max_queue_size=10, 
	workers=1, 
	use_multiprocessing=False
)

训练模型固定数量的时期(数据集上的迭代)

    参数

 

x

输入数据。 它可能是:

  • 一个 Numpy 数组(或类似数组),或数组列表(以防模型有多个输入)。
  • 一个 TensorFlow 张量,或一个张量列表(如果模型有多个输入)。
  • 如果模型具有命名输入,则 dict 将输入名称映射到相应的数组/张量。
  • tf.data数据集。 应该返回(inputs, targets) 或(inputs, targets, sample_weights)的元组
  • 返回(inputs, targets) 或(inputs, targets, sample_weights)的生成器或 keras.utils.Sequence 。
  • 一个 tf.keras.utils.experimental.DatasetCreator,它包装了一个可调用的,的 tf.distribute.InputContext类型的参数,并返回一个 tf.data.Dataset
  • 当用户更喜欢为数据集指定每个副本的批处理和分片逻辑时,应使用 DatasetCreator。有关更多信息,请参阅 tf.keras.utils.experimental.DatasetCreator文档。下面给出了迭代器类型(Dataset, generator, Sequence) 的解包行为的更详细描述。如果使用 tf.distribute.experimental.ParameterServerStrategy,x 仅支持 DatasetCreator类型。

y

目标数据。 与输入数据 x 一样,它可以是 Numpy 数组或 TensorFlow 张量。它应该与 x 一致(你不能有 Numpy 输入和张量目标,或者相反)。如果 x 是数据集、生成器或keras.utils.Sequence 实例,则不应指定 y(因为将从 x 获取目标)。

batch_size

整数或无。 每次梯度更新的样本数。 如果未指定,batch_size 将默认为 32。如果您的数据采用数据集、生成器或 keras.utils.Sequence 实例的形式(因为它们生成批次),则不要指定 batch_size

epochs

整数。 训练模型的周期数。 epoch 是对提供的整个 x 和 y 数据的迭代。请注意,与initial_epoch 一起使用时,epochs 应理解为“final epoch”。该模型不是针对由 epoch 给出的多次迭代进行训练,而是直到达到索引 epoch 的 epoch。

verbose

'auto'、0、1 或 2。详细模式。 0 = 无声,1 = 进度条,2 = 每个 epoch 一行。'auto' 在大多数情况下默认为 1,但与 ParameterServerStrategy 一起使用时默认为 2。请注意,进度条在记录到文件时不是特别有用,因此在不以交互方式运行时(例如,在生产环境中)建议使用 verbose=2。

callbacks

keras.callbacks.Callback  实例列表。在训练期间应用的回调列表。 参见 tf.keras.callbacks。 注意tf.keras.callbacks.ProgbarLoggertf.keras.callbacks.History 回调是自动创建的,不需要传递到model.fit中。tf.keras.callbacks.ProgbarLogger 的创建与否基于 model.fit 的详细参数。tf.distribute.experimental.ParameterServerStrategy 目前不支持批处理级调用的回调,建议用户使用适当的 steps_per_epoch 值来实现epoch-level调用。

validation_split

在0和1之间的浮点。用作验证数据的训练数据的一部分。 该模型将把这部分训练数据分开,不会对其进行训练,并将在每个周期结束时评估损失和此数据的任何模型指标。在混洗之前,验证数据是从提供的 x 和 y 数据中的最后一个样本中选择的。当 x 是数据集、生成器或keras.utils.Sequence实例时,不支持此参数。 tf.distribute.experimental.ParameterServerStrategy尚不支持validation_split

validation_data

在每个epoch结束时评估损失和任何模型指标的数据。该模型将不会在此数据上进行训练。因此,请注意这样一个事实,即使用 validation_splitvalidation_data 提供的数据的验证丢失不受噪声和 dropout 等正则化层的影响。validation_data 将覆盖validation_splitvalidation_data可以是:

shuffle

Boolean(是否在每个 epoch 之前打乱训练数据)或 str(对于 'batch')。当 x 是生成器或 tf.data.Dataset 的对象时,将忽略此参数。'batch' 是处理 HDF5 数据限制的特殊选项; 它以批量大小的块进行洗牌。 当steps_per_epoch 不是None 时无效。

class_weight

可选字典将类索引(整数)映射到权重(浮点数)值,用于对损失函数进行加权(仅在训练期间)。这对于告诉模型“更多关注”来自代表性不足的类的样本很有用。

sample_weight

训练样本的可选 Numpy 权重数组,用于对损失函数进行加权(仅在训练期间)。您可以传递与输入样本长度相同的平面 (1D) Numpy 数组(权重和样本之间的 1:1 映射),或者在temporal data的情况下,您可以传递一个形状为 (samples, sequence_length) 的二维数组,以对每个样本的每个时间步应用不同的权重。当 x 是数据集、生成器或keras.utils.Sequence 实例时,不支持此参数,而是提供 sample_weights 作为 x 的第三个元素。

initial_epoch

整数。 开始训练的时期(对于恢复之前的训练运行很有用)。

steps_per_epoch

整数或无。宣布一个epoch结束并开始下一个epoch之前的总步数(样本批次)。使用输入张量(例如 TensorFlow 数据张量)进行训练时,默认 None 等于数据集中的样本数除以批量大小,如果无法确定,则为 1。如果 x 是 tf.data  数据集,并且 'steps_per_epoch' 为 None,则 epoch 将运行,直到输入数据集耗尽。传递无限重复的数据集时,您必须指定 steps_per_epoch 参数。数组输入不支持此参数。 steps_per_epoch=None 在使用 tf.distribute.experimental.ParameterServerStrategy 时不受支持。

validation_steps

仅当提供了 validation_data 并且是 tf.data 数据集时才相关。在每个 epoch 结束执行验证时停止前要绘制的总步数(样本批次)。如果 'validation_steps' 为 None,则验证将一直运行,直到validation_data 数据集耗尽。在无限重复数据集的情况下,它将陷入无限循环。 如果指定了 'validation_steps' 并且仅消耗部分数据集,则评估将从每个epoch的数据集开头开始。这确保每次都使用相同的验证样本。

validation_batch_size

整数或无。 每个验证批次的样本数。 如果未指定,将默认为 batch_size。如果您的数据采用数据集、生成器或keras.utils.Sequence 实例的形式(因为它们生成批次),请不要指定 validation_batch_size

validation_freq

仅在提供验证数据时相关。 整数或 collections.abc.Container 实例(例如列表、元组等)。如果是整数,则指定在执行新的验证运行之前要运行的训练周期数,例如 validation_freq=2 每 2 个 epoch 运行一次验证。如果是容器,则指定运行验证的epochs,例如 validation_freq=[1, 2, 10] 在第 1、2 和 10 轮结束时运行验证。

max_queue_size

整数。 仅用于生成器或 keras.utils.Sequence 输入。 生成器队列的最大大小。 如果未指定,max_queue_size 将默认为 10。

workers

整数。 仅用于生成器或 keras.utils.Sequence  输入。 使用基于进程的线程时要启动的最大进程数。 如果未指定,workers 将默认为 1。

use_multiprocessing

布尔值。 仅用于生成器或 keras.utils.Sequence 输入。如果为 True,则使用基于进程的线程。 如果未指定,use_multiprocessing 将默认为 False。请注意,由于此实现依赖于多处理,因此您不应将non-picklable 参数传递给生成器,因为它们无法轻松传递给子进程。

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值