Keras 2 API 文档 / 实用工具 / 后端实用工具

后端实用工具

[源代码]

clear_session 函数

tf_keras.backend.clear_session()

重置 TF-Keras 生成的所有状态。

TF-Keras 管理一个全局状态,用于实现函数式模型构建 API 并使自动生成的层名称唯一。

如果您在循环中创建许多模型,此全局状态会随着时间的推移消耗越来越多的内存,您可能需要清除它。调用 clear_session() 会释放全局状态:这有助于避免旧模型和层的混乱,尤其是在内存有限的情况下。

示例 1:在循环中创建模型时调用 clear_session()

for _ in range(100):
  # Without `clear_session()`, each iteration of this loop will
  # slightly increase the size of the global state managed by Keras
  model = tf.keras.Sequential([
      tf.keras.layers.Dense(10) for _ in range(10)])

for _ in range(100):
  # With `clear_session()` called at the beginning,
  # TF-Keras starts with a blank state at each iteration
  # and memory consumption is constant over time.
  tf.keras.backend.clear_session()
  model = tf.keras.Sequential([
      tf.keras.layers.Dense(10) for _ in range(10)])

示例 2:重置层名称生成计数器

>>> import tensorflow as tf
>>> layers = [tf.keras.layers.Dense(10) for _ in range(10)]
>>> new_layer = tf.keras.layers.Dense(10)
>>> print(new_layer.name)
dense_10
>>> tf.keras.backend.set_learning_phase(1)
>>> print(tf.keras.backend.learning_phase())
1
>>> tf.keras.backend.clear_session()
>>> new_layer = tf.keras.layers.Dense(10)
>>> print(new_layer.name)
dense

[源代码]

floatx 函数

tf_keras.backend.floatx()

以字符串形式返回默认的浮点类型。

例如,'float16''float32''float64'

返回值

字符串,当前默认的浮点类型。

示例

>>> tf.keras.backend.floatx()
'float32'

[源代码]

set_floatx 函数

tf_keras.backend.set_floatx(value)

设置默认的浮点类型。

注意:不建议将此设置为 float16 进行训练,因为这可能会导致数值稳定性问题。相反,可以通过调用 tf.keras.mixed_precision.set_global_policy('mixed_float16') 来使用混合精度,即混合使用 float16 和 float32。有关详细信息,请参阅混合精度指南

参数

  • value: 字符串;'float16''float32''float64'

示例

>>> tf.keras.backend.floatx()
'float32'
>>> tf.keras.backend.set_floatx('float64')
>>> tf.keras.backend.floatx()
'float64'
>>> tf.keras.backend.set_floatx('float32')

抛出

  • ValueError: 如果值无效。

[源代码]

image_data_format 函数

tf_keras.backend.image_data_format()

返回默认的图像数据格式约定。

返回值

一个字符串,可以是 'channels_first''channels_last'

示例

>>> tf.keras.backend.image_data_format()
'channels_last'

[源代码]

set_image_data_format 函数

tf_keras.backend.set_image_data_format(data_format)

设置图像数据格式约定的值。

参数

  • data_format: 字符串。'channels_first''channels_last'

示例

>>> tf.keras.backend.image_data_format()
'channels_last'
>>> tf.keras.backend.set_image_data_format('channels_first')
>>> tf.keras.backend.image_data_format()
'channels_first'
>>> tf.keras.backend.set_image_data_format('channels_last')

抛出

  • ValueError: 如果 data_format 值无效。

[源代码]

epsilon 函数

tf_keras.backend.epsilon()

返回数值表达式中使用的模糊因子的值。

返回值

一个浮点数。

示例

>>> tf.keras.backend.epsilon()
1e-07

[源代码]

set_epsilon 函数

tf_keras.backend.set_epsilon(value)

设置数值表达式中使用的模糊因子的值。

参数

  • value: 浮点数。epsilon 的新值。

示例

>>> tf.keras.backend.epsilon()
1e-07
>>> tf.keras.backend.set_epsilon(1e-5)
>>> tf.keras.backend.epsilon()
1e-05
>>> tf.keras.backend.set_epsilon(1e-7)

[源代码]

is_keras_tensor 函数

tf_keras.backend.is_keras_tensor(x)

返回 x 是否为 TF-Keras 张量。

“Keras 张量”是由 TF-Keras 层 (Layer 类) 或 Input 返回的张量。

参数

  • x: 一个候选张量。

返回值

  • 一个布尔值: 该参数是否为 TF-Keras 张量。

抛出

  • ValueError: 如果 x 不是符号张量。

示例

>>> np_var = np.array([1, 2])
>>> # A numpy array is not a symbolic tensor.
>>> tf.keras.backend.is_keras_tensor(np_var)
Traceback (most recent call last):
...
ValueError: Unexpectedly found an instance of type
`<class 'numpy.ndarray'>`.
Expected a symbolic tensor instance.
>>> keras_var = tf.keras.backend.variable(np_var)
>>> # A variable created with the keras backend is not a TF-Keras tensor.
>>> tf.keras.backend.is_keras_tensor(keras_var)
False
>>> keras_placeholder = tf.keras.backend.placeholder(shape=(2, 4, 5))
>>> # A placeholder is a TF-Keras tensor.
>>> tf.keras.backend.is_keras_tensor(keras_placeholder)
True
>>> keras_input = tf.keras.layers.Input([10])
>>> # An Input is a TF-Keras tensor.
>>> tf.keras.backend.is_keras_tensor(keras_input)
True
>>> keras_layer_output = tf.keras.layers.Dense(10)(keras_input)
>>> # Any TF-Keras layer output is a TF-Keras tensor.
>>> tf.keras.backend.is_keras_tensor(keras_layer_output)
True

[源代码]

get_uid 函数

tf_keras.backend.get_uid(prefix="")

将字符串前缀与 TensorFlow 图中的整数计数器关联。

参数

  • prefix: 要索引的字符串前缀。

返回值

唯一的整数 ID。

示例

>>> get_uid('dense')
1
>>> get_uid('dense')
2

[源代码]

rnn 函数

tf_keras.backend.rnn(
    step_function,
    inputs,
    initial_states,
    go_backwards=False,
    mask=None,
    constants=None,
    unroll=False,
    input_length=None,
    time_major=False,
    zero_output_for_mask=False,
    return_all_outputs=True,
)

遍历张量的时间维度。

参数

  • step_function: RNN 步函数。参数:input;形状为 (样本数, ...)(没有时间维度)的张量,表示特定时间步长的批次样本的输入。states;张量列表。返回值:output;形状为 (样本数, output_dim)(没有时间维度)的张量。new_states;张量列表,长度和形状与 “states” 相同。列表中的第一个状态必须是前一个时间步的输出张量。
  • inputs: 形状为 (样本数, 时间, ...)(至少 3D)的时间数据张量,或嵌套张量,每个张量的形状均为 (样本数, 时间, ...)
  • initial_states: 形状为 (样本数, 状态大小)(没有时间维度)的张量,包含步函数中使用的状态的初始值。如果 state_size 是嵌套形状,则 initial_states 的形状也将遵循嵌套结构。
  • go_backwards: 布尔值。如果为 True,则反向遍历时间维度并返回反向序列。
  • mask: 形状为 (样本数, 时间, 1) 的二元张量,每个被屏蔽的元素的值为零。
  • constants: 每个步骤传递的常量值列表。
  • unroll: 是否展开 RNN 或使用符号 while_loop
  • input_length: 一个整数或一个 1-D 张量,具体取决于时间维度是否为固定长度。如果输入长度可变,则在未指定 mask 的情况下,它用于进行掩码。
  • time_major: 布尔值。如果为 true,则输入和输出的形状将为 (时间步长, 批次大小, ...),而 False 的情况下,其形状将为 (批次大小, 时间步长, ...)。使用 time_major = True 更有效一些,因为它避免了 RNN 计算开始和结束时的转置。但是,大多数 TensorFlow 数据都是批次优先的,因此默认情况下此函数接受批次优先形式的输入并发出批次优先形式的输出。
  • zero_output_for_mask: 布尔值。如果为 True,则被屏蔽的时间步的输出将为零,而 False 的情况下,将返回前一个时间步的输出。
  • return_all_outputs: 布尔值。如果为 True,则返回序列中所有时间步的循环输出。如果为 False,则仅返回最后一个时间步的输出(这会消耗更少的内存)。

返回值

一个元组 (last_output, outputs, new_states)。last_output:rnn 的最新输出,形状为 (样本数, ...)。outputs: - 如果 return_all_outputs=True:形状为 (样本数, 时间, ...) 的张量,其中每个条目 outputs[s, t] 是样本 s 在时间 t 的步函数的输出 - 否则,张量等于 last_output,形状为 (样本数, 1, ...)。new_states:张量列表,步函数返回的最新状态,形状为 (样本数, ...)

抛出

  • ValueError: 如果输入维度小于 3。
  • ValueError: 如果 unrollTrue 但输入时间步长不是固定数字。
  • ValueError: 如果提供了 mask (不为 None) 但未提供状态 (len(states) == 0)。