【发布时间】:2021-05-12 08:26:21
【问题描述】:
我正在指定一个从 dropout 进行正则化的网络。但是我无法理解这里是如何处理辍学的。具体来说,为什么应用 dropout 前后的零个数之差不完全等于 dropout 比例?
class DropoutDenseNetwork(tf.Module):
def __init__(self, name=None):
super(DropoutDenseNetwork, self).__init__(name=name)
self.dense_layer1 = Dense(32)
self.dropout = tf.keras.layers.Dropout(0.2)
self.dense_layer2 = Dense(10, activation=tf.identity)
@tf.function
def __call__(self, x, is_training):
embed = self.dense_layer1(x)
propn_zero_before = tf.reduce_mean(tf.cast(tf.equal(embed, 0.), tf.float32))
embed = self.dropout(embed, is_training)
propn_zero_after = tf.reduce_mean(tf.cast(tf.equal(embed, 0.), tf.float32))
tf.print('Zeros before and after:', propn_zero_before, "and", propn_zero_after)
output = self.dense_layer2(embed)
return output
if 'drop_dense_net' not in locals():
drop_dense_net = DropoutDenseNetwork()
drop_dense_net(tf.ones([1, 100]), tf.constant(True))
【问题讨论】:
-
你可以通过对自己的stackoverflow.com/a/65504785/10375049实现dropout来理解这一点
标签: python tensorflow keras deep-learning dropout