首页 > 解决方案 > 对全连接层使用单个共享偏差

问题描述

我正在尝试从一篇论文 [ 1 ] 中尝试一些东西,其中要求 FC 层中的所有神经元都有一个共同的偏置项,而不是每个神经元的单独偏置项。

我如何在 Tensorflow 中做到这一点?

是否可以创建一个没有偏差的 FC 层,最后添加tf.nn.bias_add()?这是正确的方法吗?
如果是这样,则没有标志可以设置tf.nn.bias_add()trainable. 它会起作用吗?

或者有什么其他建议?


参考文献:
[ 1 ]:Deep Reinforcement Learning with Double Q-Learning(Pg.6 右侧)

标签: tensorflowmachine-learningkerasdeep-learning

解决方案


tf.nn.bias_add(value, bias)需要A 1-D Tensor with size matching the last dimension of value. 所以就tf.add这样做:

X = tf.placeholder(tf.float32, [None, 32])
W = tf.Variable(tf.truncated_normal([32, 16]))

#Single bias for all the 16 output
bias = tf.Variable(tf.truncated_normal([1]))

#Works as expected
y =  tf.add(tf.matmul(X,W), bias)

#ValueError: Dimensions must be equal, but are 16 and 1 for 'BiasAdd'
z =  tf.nn.bias_add(tf.matmul(X,W), bias)

推荐阅读