如何在 Tensorflow 中获取 dropout mask
How to get the dropout mask in Tensorflow
我已经通过 Tensorflow 构建了一个带有 dropout 的回归类型的神经网络 (NN)。我想知道是否有可能在输出文件中找到从上一层删除的隐藏单元。因此,我们可以用 C++ 或 Matlab 来实现神经网络的结果。
下面是Tensorflow模型的一个例子。有三个隐藏层和一个输出层。在第 3 个 sigmoid 层之后,有一个概率等于 0.9 的 dropout。我想知道是否有可能知道第 3 个 sigmoid 层中的哪些隐藏单元被丢弃了。
def multilayer_perceptron(_x, _weights, _biases):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_x, _weights['h1']), _biases['b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2']))
layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, _weights['h3']), _biases['b3']))
layer_d = tf.nn.dropout(layer_3, 0.9)
return tf.matmul(layer_d, _weights['out']) + _biases['out']
非常感谢!
有一种方法可以获取由 tf.nn.dropout()
生成的 0 和 1 形状 layer_3.get_shape()
的掩码。
诀窍是为你的 dropout 操作命名:
layer_d = tf.nn.dropout(layer_3, 0.9, name='my_dropout')
然后就可以通过TensorFlow graph得到想要的mask了:
graph = tf.get_default_graph()
mask = graph.get_tensor_by_name('my_dropout/Floor:0')
张量 mask
将与 layer_d
具有 相同的形状和类型 ,并且只有值 0
或 1
. 0
对应丢弃的神经元。
简单且惯用的解决方案(尽管可能比 Oliver 的稍慢):
# generate mask
mask = tf.nn.dropout(tf.ones_like(layer),rate)
# apply mask
dropped_layer = layer * mask
我已经通过 Tensorflow 构建了一个带有 dropout 的回归类型的神经网络 (NN)。我想知道是否有可能在输出文件中找到从上一层删除的隐藏单元。因此,我们可以用 C++ 或 Matlab 来实现神经网络的结果。
下面是Tensorflow模型的一个例子。有三个隐藏层和一个输出层。在第 3 个 sigmoid 层之后,有一个概率等于 0.9 的 dropout。我想知道是否有可能知道第 3 个 sigmoid 层中的哪些隐藏单元被丢弃了。
def multilayer_perceptron(_x, _weights, _biases):
layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(_x, _weights['h1']), _biases['b1']))
layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2']))
layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, _weights['h3']), _biases['b3']))
layer_d = tf.nn.dropout(layer_3, 0.9)
return tf.matmul(layer_d, _weights['out']) + _biases['out']
非常感谢!
有一种方法可以获取由 tf.nn.dropout()
生成的 0 和 1 形状 layer_3.get_shape()
的掩码。
诀窍是为你的 dropout 操作命名:
layer_d = tf.nn.dropout(layer_3, 0.9, name='my_dropout')
然后就可以通过TensorFlow graph得到想要的mask了:
graph = tf.get_default_graph()
mask = graph.get_tensor_by_name('my_dropout/Floor:0')
张量 mask
将与 layer_d
具有 相同的形状和类型 ,并且只有值 0
或 1
. 0
对应丢弃的神经元。
简单且惯用的解决方案(尽管可能比 Oliver 的稍慢):
# generate mask
mask = tf.nn.dropout(tf.ones_like(layer),rate)
# apply mask
dropped_layer = layer * mask