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,
)
迭代张量的时间维度。
参数
(samples, ...) 的张量(无时间维度),表示特定时间步的样本批次的输入。states;张量列表。返回值:output;形状为 (samples, output_dim) 的张量(无时间维度)。new_states;张量列表,与 'states' 的长度和形状相同。列表中的第一个状态必须是上一个时间步的输出张量。(samples, time, ...)(至少 3D)的时间数据张量,或嵌套张量,其中每个张量的形状为 (samples, time, ...)。(samples, state_size)(无时间维度)的张量,包含步函数中使用的状态的初始值。如果 state_size 位于嵌套形状中,则 initial_states 的形状也将遵循嵌套结构。(samples, time, 1) 的二进制张量,其中每个被屏蔽的元素都为零。while_loop。(timesteps, batch, ...),而在 False 的情况下,形状为 (batch, timesteps, ...)。使用 time_major = True 效率更高,因为它避免了 RNN 计算开始和结束时的转置。但是,大多数 TensorFlow 数据是批次主导的,因此默认情况下此函数以批次主导形式接受输入并发出输出。返回
一个元组,(last_output, outputs, new_states)。last_output:rnn 的最新输出,形状为 (samples, ...) outputs:- 如果 return_all_outputs=True:形状为 (samples, time, ...) 的张量,其中每个条目 outputs[s, t] 是样本 s 在时间 t 的步函数输出。- 否则,一个等于 last_output 的张量,形状为 (samples, 1, ...) new_states:张量列表,由步函数返回的最新状态,形状为 (samples, ...)。
引发
unroll 为 True 但输入时间步不是固定数量。mask(不为 None),但未提供状态(len(states) == 0)。