模型将层分组为具有训练和推理特征的对象。

继承自:Layer, Module

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

参数

inputs

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

outputs

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

name

字符串,模型的名称。

实例化模型有两种方法:

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

import tensorflow as tfinputs = 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 tfclass 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 tfclass 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.BinaryAccuracy, tf.keras.metrics.CategoricalAccuracy, tf.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.ProgbarLogger和 tf.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可以是:

  • Numpy 数组或张量的元组 (x_val, y_val)
  • NumPy 数组的元组 (x_val, y_val, val_sample_weights)
  • tf.data.Dataset
  • 返回(inputs, targets)(inputs, targets, sample_weights)的 Python 生成器或  keras.utils.Sequence。tf.distribute.experimental.ParameterServerStrategy尚不支持validation_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 参数传递给生成器,因为它们无法轻松传递给子进程。

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

  1. TensorFlow学习笔记(九)tf搭建神经网络基本流程

    1. 搭建神经网络基本流程 定义添加神经层的函数 1.训练的数据 2.定义节点准备接收数据 3.定义神经层:隐藏层和预测层 4.定义 loss 表达式 5.选择 optimizer 使 loss 达到 ...

  2. TensorFlow学习笔记12----Creating Estimators in tf.contrib.learn

    原文教程:tensorflow官方教程 记录关键内容与学习感受.未完待续.. Creating Estimators in tf.contrib.learn --tf.contrib.learn框架, ...

  3. TensorFlow学习--指数移动平均/tf.train.ExponentialMovingAverage

    时间序列模型 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列.时间序列分析的主要目的是根据已有的历史数据对未来进行预测.处理与时间相关数据的方法叫做时间序列模型. 当一个平稳序列 ...

  4. TensorFlow学习笔记(十七)tf.nn.conv2d

    在给定的4D input与filter下计算2D卷积输入shape为[batch, height, width, in_channels] TensorFlow的CNN代码中有 tf.nn.conv2 ...

  5. TensorFlow学习笔记(十)tf搭建神经网络可视化结果

    代码 """ Please note, this code is only for python 3+. If you are using python 2+, plea ...

  6. Tensorflow学习——Keras

    Keras 是一个用于构建和训练深度学习模型的高阶 API.它可用于快速设计原型.高级研究和生产,具有以下三个主要优势: 方便用户使用 Keras 具有针对常见用例做出优化的简单而一致的界面.它可针对 ...

  7. TensorFlow 学习(七) — 常用函数 api、tf.nn、tf.keras

    0. 四则运算 平方:tf.square(),开方:tf.sqrt() tf.add().tf.sub().tf.mul().tf.div().tf.mod().tf.abs().tf.neg() 1 ...

  8. Keras vs tf.keras: 在TensorFlow 2.0中有什么区别?

    导读 在本文中,您将发现Keras和tf.keras之间的区别,包括TensorFlow 2.0中的新增功能. 万众期待的TensorFlow 2.0于9月30日正式发布. 虽然肯定是值得庆祝的时刻, ...

  9. Keras与tf.keras:TensorFlow 2.0有什么区别?

      在本教程的第一部分中,我们将讨论Keras和TensorFlow之间相互交织的历史,包括他们共同的受欢迎程度如何相互滋养,相互促进和滋养,使我们走向今天.   然后,我将讨论为什么您应该在以后的所 ...

最新文章

  1. 4、通过uiautomatorviewer实现appium元素定位
  2. c语言printf()输出格式控制
  3. 填平新版本Xcode安装插件不成功的坑
  4. 使用Silverlight for Embedded开发绚丽的界面(4)
  5. SpringMVC运行报错 unable to find resource 'XXX.vm' in any resource loader
  6. improve怎么加ing_英语当中的ing
  7. 字字谏言!Python入门学习教程:关于Python不得不说的事儿
  8. Keil C51,内存与指针
  9. cors跨域_Spring Boot 中通过 CORS 解决跨域问题
  10. visibility: hidden与display:none的区别
  11. Android 开发者们,如何使用 Python 来扩展 adb 命令?
  12. 编程之美读书笔记2.14 - 子数组之和的最大值
  13. 个人知识管理系统Version1.0开发记录(07)
  14. c语言查看错误步骤命令,C语言之预处理命令
  15. 双指针算法基础——输出单词
  16. c++如何让字符串重复输出_Python基础三(数据类型之数字和字符串)
  17. FPGA三段式状态机的思维陷阱
  18. vs2019编译libcef
  19. C语⾔核⼼基础知识之printf
  20. 看巨人,学巨人,超巨人

热门文章

  1. python中 “按位与,或,异或”与C语言的不同
  2. 北京大学人工智能研究院落户武汉,致力于打造一流人工智能研发机构
  3. 【C语言】交换函数(swap)
  4. 自然语言处理顶会 NAACL 2018 最佳论文、时间检验论文揭晓
  5. 什么是安全文件传输?
  6. 【信号处理】基于蚁群优化随机共振检测附matlab代码
  7. OffscreenCanvas-离屏canvas使用说明
  8. 已有定义int x=57,用isprime()来判断整型数x是否为素数
  9. substr函数|字符串截取
  10. 致Emacs初学者+Emacs初学者必知必会