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 数据是批次主导 (batch-major) 的,因此此函数默认接受批次主导形式的输入并输出。返回值
一个元组,(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, ...)
。
抛出异常
unroll
为 True
但输入时间步不是固定数量。mask
(非 None
)但未提供 states(len(states)
== 0)。