tensorflow - 对全连接层使用单个共享偏差
问题描述
我正在尝试从一篇论文 [ 1 ] 中尝试一些东西,其中要求 FC 层中的所有神经元都有一个共同的偏置项,而不是每个神经元的单独偏置项。
我如何在 Tensorflow 中做到这一点?
是否可以创建一个没有偏差的 FC 层,最后添加tf.nn.bias_add()
?这是正确的方法吗?
如果是这样,则没有标志可以设置tf.nn.bias_add()
为trainable
. 它会起作用吗?
或者有什么其他建议?
参考文献:
[ 1 ]:Deep Reinforcement Learning with Double Q-Learning(Pg.6 右侧)
解决方案
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)
推荐阅读
- angular - 根据文化信息动态配置Angular中的数字格式
- javascript - 反应 localStorage 对象属性返回未定义
- python - ValueError:int() 的无效文字,基数为 10:终端中的“favicon.ico”
- mysql - 3张表来计算商品价格
- laravel - 在 Laravel 8 中使用 Tailwind 安装 Font Awesome
- node.js - 如何在猫鼬中填充另一个模型的子文档?
- swift - 核心数据,@Environment(\.managedObjectContext),onMove
- php - phpmyadmin 数据库中的斯洛文尼亚字符未使用 select where 子句获取
- python - 使用 BERT 文本分类,ValueError: too many dimensions 'str' 发生错误
- apache-spark - 在 zeppelin 中获取 java.lang.NoSuchMethodError 运行 spark 代码以使用 SQL DB 创建数据帧