当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.keras.Model用法及代码示例


Model 将图层分组为具有训练和推理函数的对象。

继承自:LayerModule

用法

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

参数

  • inputs 模型的输入:keras.Input 对象或keras.Input 对象列表。
  • outputs 模型的输出。请参阅下面的函数 API 示例。
  • name 字符串,模型的名称。

属性

  • 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 代码一样逐步运行。您的模型可能会运行得更慢,但通过单步调用各个层调用,您应该可以更轻松地对其进行调试。

    默认情况下,我们将尝试将您的模型编译为静态图以提供最佳执行性能。

有两种方法可以实例化 Model

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

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)

注意:仅支持输入张量的字典、列表和元组。不支持嵌套输入(例如列表列表或 dict 的 dicts)。

也可以使用中间张量创建新的函数 API 模型。这使您能够快速提取模型的sub-components。

例子:

inputs = keras.Input(shape=(None, None, 3))
processed = keras.layers.RandomCrop(width=32, height=32)(inputs)
conv = keras.layers.Conv2D(filters=2, kernel_size=3)(processed)
pooling = keras.layers.GlobalAveragePooling2D()(conv)
feature = keras.layers.Dense(10)(pooling)

full_model = keras.Model(inputs, feature)
backbone = keras.Model(processed, conv)
activations = keras.Model(conv, feature)

请注意,backboneactivations 模型不是使用 keras.Input 对象创建的,而是使用源自 keras.Inputs 对象的张量创建的。在底层,这些模型将共享层和权重,以便用户可以训练 full_model ,并使用 backboneactivations 进行特征提取。模型的输入和输出也可以是张量的嵌套结构,创建的模型是标准的函数 API 模型,支持所有现有的 API。

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

import tensorflow as tf

class MyModel(tf.keras.Model):

  def __init__(self):
    super().__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()

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

import tensorflow as tf

class MyModel(tf.keras.Model):

  def __init__(self):
    super().__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() 使用模型进行预测。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.Model。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。