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。有关详细信息,请参阅混合精度指南。
参数
'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')
抛出
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)
设置图像数据格式约定的值。
参数
'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')
抛出
data_format
值无效。epsilon
函数tf_keras.backend.epsilon()
返回数值表达式中使用的模糊因子的值。
返回值
一个浮点数。
示例
>>> tf.keras.backend.epsilon()
1e-07
set_epsilon
函数tf_keras.backend.set_epsilon(value)
设置数值表达式中使用的模糊因子的值。
参数
示例
>>> 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
不是符号张量。示例
>>> 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 图中的整数计数器关联。
参数
返回值
唯一的整数 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,
)
遍历张量的时间维度。
参数
(样本数, ...)
(没有时间维度)的张量,表示特定时间步长的批次样本的输入。states;张量列表。返回值:output;形状为 (样本数, output_dim)
(没有时间维度)的张量。new_states;张量列表,长度和形状与 “states” 相同。列表中的第一个状态必须是前一个时间步的输出张量。(样本数, 时间, ...)
(至少 3D)的时间数据张量,或嵌套张量,每个张量的形状均为 (样本数, 时间, ...)
。(样本数, 状态大小)
(没有时间维度)的张量,包含步函数中使用的状态的初始值。如果 state_size 是嵌套形状,则 initial_states 的形状也将遵循嵌套结构。(样本数, 时间, 1)
的二元张量,每个被屏蔽的元素的值为零。while_loop
。(时间步长, 批次大小, ...)
,而 False 的情况下,其形状将为 (批次大小, 时间步长, ...)
。使用 time_major = True
更有效一些,因为它避免了 RNN 计算开始和结束时的转置。但是,大多数 TensorFlow 数据都是批次优先的,因此默认情况下此函数接受批次优先形式的输入并发出批次优先形式的输出。返回值
一个元组 (last_output, outputs, new_states)
。last_output:rnn 的最新输出,形状为 (样本数, ...)
。outputs: - 如果 return_all_outputs=True
:形状为 (样本数, 时间, ...)
的张量,其中每个条目 outputs[s, t]
是样本 s
在时间 t
的步函数的输出 - 否则,张量等于 last_output
,形状为 (样本数, 1, ...)
。new_states:张量列表,步函数返回的最新状态,形状为 (样本数, ...)
。
抛出
unroll
为 True
但输入时间步长不是固定数字。mask
(不为 None
) 但未提供状态 (len(states)
== 0)。