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;形状为 (samples, ...) 的张量(无时间维度),表示在某个时间步下批样本的输入。states;张量列表。返回值包括:output;形状为 (samples, output_dim) 的张量(无时间维度)。new_states;张量列表,与 'states' 具有相同的长度和形状。列表中第一个状态必须是前一个时间步的输出张量。
  • inputs:形状为 (samples, time, ...) 的时间序列数据张量(至少 3D),或嵌套张量,其中每个张量的形状均为 (samples, time, ...)
  • initial_states:形状为 (samples, state_size) 的张量(无时间维度),包含步进函数中使用的状态的初始值。如果 state_size 为嵌套形状,initial_states 的形状也将遵循嵌套结构。
  • go_backwards:布尔值。如果为 True,则按反向顺序遍历时间维度并返回反向序列。
  • mask:形状为 (samples, time, 1) 的二进制张量,被遮罩的每个元素对应的值为零。
  • constants:在每个步骤中传递的常量值列表。
  • unroll:是否展开 RNN 或使用符号式 while_loop
  • input_length:整数或一维张量,取决于时间维度是否为固定长度。对于变长输入,在未指定遮罩时,此参数用于遮罩。
  • time_major:布尔值。如果为 true,输入和输出将采用形状 (timesteps, batch, ...),如果为 False,则采用 (batch, timesteps, ...)。使用 time_major = True 效率略高,因为它避免了 RNN 计算开始和结束时的转置。然而,大多数 TensorFlow 数据是批次主导 (batch-major) 的,因此此函数默认接受批次主导形式的输入并输出。
  • zero_output_for_mask:布尔值。如果为 True,被遮罩时间步的输出将为零,否则返回前一个时间步的输出。
  • return_all_outputs:布尔值。如果为 True,则返回序列中所有时间步的循环输出。如果为 False,则仅返回最后一个时间步的输出(这样可以节省内存)。

返回值

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

抛出异常

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