我已经构建了一个回归类型的神经网络(NN)和Tensorflow的丢失。我想知道是否有可能找到从输出文件中的上一层中删除哪些隐藏单元。因此,我们可以通过C ++或Matlab实现NN结果。
以下是Tensorflow模型的示例。有三个隐藏层和一个输出层。在第3个sigmoid层之后,存在一个概率等于0.9的丢失。我想知道是否可以知道第三个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']
非常感谢!
答案 0 :(得分:5)
有一种方法可以获得由layer_3.get_shape()
生成的0和1以及tf.nn.dropout()
形状的蒙版。
诀窍是为你的辍学行动命名:
layer_d = tf.nn.dropout(layer_3, 0.9, name='my_dropout')
然后你可以通过TensorFlow图获得想要的掩码:
graph = tf.get_default_graph()
mask = graph.get_tensor_by_name('my_dropout/Floor:0')
张量mask
与layer_d
的形状和类型相同,并且只有0
或1
的值。 0
对应于丢弃的神经元。
答案 1 :(得分:1)
简单惯用的解决方案(尽管可能比Oliver的解决方案慢一些):
# generate mask
mask = tf.nn.dropout(tf.ones_like(layer),rate)
# apply mask
dropped_layer = layer * mask