计算 dropout:随机将元素设置为零以防止过度拟合。
用法
tf.nn.experimental.stateless_dropout(
x, rate, seed, rng_alg=None, noise_shape=None, name=None
)
参数
-
x
浮点张量。 -
rate
与 x 具有相同类型的标量Tensor
。每个元素被丢弃的概率。例如,设置 rate=0.1 将丢弃 10% 的输入元素。 -
seed
形状为[2]
的整数张量。随机数的种子。 -
rng_alg
用于生成随机数的算法(默认为"auto_select"
)。有关支持的值,请参阅tf.random.stateless_uniform
的alg
参数。 -
noise_shape
一维整数Tensor
,表示随机生成的保持/丢弃标志的形状。 -
name
此操作的名称。
返回
-
x
具有相同形状和 dtype 的张量。
抛出
-
ValueError
如果rate
不在[0, 1)
中,或者如果x
不是浮点张量。rate=1
是不允许的,因为输出将全为零,这可能不是预期的。
Dropout 对于正则化 DNN 模型很有用。输入元素被随机设置为零(并且其他元素被重新缩放)。这鼓励每个节点独立有用,因为它不能依赖其他节点的输出。
更准确地说:x
的 rate
元素的概率设置为 0
。其余元素按 1.0 / (1 - rate)
放大,以便保留预期值。
x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.5, seed=[1, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[2., 0., 2., 0., 0.],
[0., 0., 2., 0., 2.],
[0., 0., 0., 0., 2.]], dtype=float32)>
x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
[0., 0., 0., 0., 5.],
[0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.0, seed=[1, 0]) == x
<tf.Tensor:shape=(3, 5), dtype=bool, numpy=
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]])>
该函数是tf.nn.dropout
的无状态版本,从某种意义上说,无论调用多少次,相同的seed
会导致相同的结果,不同的seed
会导致不同的结果。
x = tf.ones([3,5])
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
[0., 0., 0., 0., 5.],
[0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[1, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
[0., 0., 0., 0., 5.],
[0., 0., 0., 0., 5.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[2, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
[0., 0., 0., 5., 0.],
[0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.experimental.stateless_dropout(x, rate=0.8, seed=[2, 0])
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[5., 0., 0., 0., 0.],
[0., 0., 0., 5., 0.],
[0., 0., 0., 0., 0.]], dtype=float32)>
将上述结果与以下tf.nn.dropout
的结果进行比较。第二次使用相同的种子调用tf.nn.dropout
,它将给出不同的输出。
tf.random.set_seed(0)
x = tf.ones([3,5])
tf.nn.dropout(x, rate=0.8, seed=1)
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 5., 5.],
[0., 5., 0., 5., 0.],
[5., 0., 5., 0., 5.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=1)
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 5., 0.],
[0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=2)
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
[0., 5., 0., 5., 0.],
[0., 0., 0., 0., 0.]], dtype=float32)>
tf.nn.dropout(x, rate=0.8, seed=2)
<tf.Tensor:shape=(3, 5), dtype=float32, numpy=
array([[0., 0., 0., 0., 0.],
[5., 0., 5., 0., 5.],
[0., 5., 0., 0., 5.]], dtype=float32)>
此函数和 tf.nn.dropout
之间的区别类似于 tf.random.stateless_uniform
和 tf.random.uniform
之间的区别。有关 TF 中各种 RNG 系统的详细说明,请参阅随机数生成指南。正如指南所述,像 tf.random.uniform 和 tf.nn.dropout 这样的传统有状态 RNG 操作尚未被弃用,但非常不鼓励,因为它们的状态难以控制。
默认情况下,每个元素都是独立保留或删除的。如果指定了noise_shape
,则必须广播到x
的形状,并且只有具有noise_shape[i] == shape(x)[i]
的维度才会做出独立的决定。这对于从图像或序列中删除整个通道很有用。例如:
x = tf.ones([3,10])
tf.nn.experimental.stateless_dropout(x, rate=2/3, noise_shape=[1,10],
seed=[1, 0])
<tf.Tensor:shape=(3, 10), dtype=float32, numpy=
array([[3., 0., 0., 0., 0., 0., 0., 3., 0., 3.],
[3., 0., 0., 0., 0., 0., 0., 3., 0., 3.],
[3., 0., 0., 0., 0., 0., 0., 3., 0., 3.]], dtype=float32)>
相关用法
- Python tf.nn.embedding_lookup_sparse用法及代码示例
- Python tf.nn.embedding_lookup用法及代码示例
- Python tf.nn.erosion2d用法及代码示例
- Python tf.nn.elu用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.set_weights用法及代码示例
- Python tf.nn.dropout用法及代码示例
- Python tf.nn.gelu用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.set_weights用法及代码示例
- Python tf.nn.RNNCellDeviceWrapper.get_weights用法及代码示例
- Python tf.nn.local_response_normalization用法及代码示例
- Python tf.nn.scale_regularization_loss用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.add_loss用法及代码示例
- Python tf.nn.max_pool用法及代码示例
- Python tf.nn.RNNCellDropoutWrapper.set_weights用法及代码示例
- Python tf.nn.l2_loss用法及代码示例
- Python tf.nn.log_softmax用法及代码示例
- Python tf.nn.weighted_cross_entropy_with_logits用法及代码示例
- Python tf.nn.ctc_greedy_decoder用法及代码示例
- Python tf.nn.dilation2d用法及代码示例
- Python tf.nn.RNNCellResidualWrapper.get_weights用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.nn.experimental.stateless_dropout。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。