我有一个愚蠢的问题,但我不知道该如何解决。
我有一个由tensorflow设计的神经网络,它具有多个权重矩阵。
我的输出层是一个完全连接的网络,它具有2D权重矩阵W。
假设W是一个3x3矩阵,我的算法需要W的行值相同。表示在更新过程中,W变为W',但每一行的元素同时更改并保持相同的值:
W= W'=
[[ x,x,x], [[ x',x',x'],
[ y,y,y], -> [ y',y',y'],
[ z,z,z]] [ z',z',z']]
表示在每个训练步骤之后,x和y,z变为x',y',z'。但第一行的所有元素均为x'。对于第二行和第三行,规则是相同的。
那么,如何在tensorflow中定义或设置W矩阵(或2D张量)?谢谢你。
答案 0 :(得分:1)
Onw方式是将权重定义为一行,并使用tf.tile
对矩阵乘法进行重复。因此,例如,代替
W = tf.get_variable("weights", shape=[3, 3])
outputs = tf.matmul(inputs, W)
您将使用
W = tf.get_variable("weights", shape=[3, 1])
outputs = tf.matmul(inputs, tf.tile(W, [1, 3]))
这将创建一个看起来像[[x], [y], [z]]
的变量,而tile
命令只是将其复制到几列上。不幸的是,您将无法以这种方式使用类似tf.layers.dense
之类的功能,但是有时候,如果我们想要灵活性,我们需要牺牲一些便利。
请注意,根据您对这个矩阵所做的确切操作,可能存在更有效的方法,这些方法可以通过使用不同的张量乘法方法来避免显式平铺。上面的示例涵盖了标准的全连接层。