如何限制Tensorflow的权重张量具有相同的行变量?表示正在更新,仍保持不变

时间:2018-07-29 13:58:55

标签: tensorflow machine-learning

我有一个愚蠢的问题,但我不知道该如何解决。

我有一个由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张量)?谢谢你。

1 个答案:

答案 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之类的功能,但是有时候,如果我们想要灵活性,我们需要牺牲一些便利。

请注意,根据您对这个矩阵所做的确切操作,可能存在更有效的方法,这些方法可以通过使用不同的张量乘法方法来避免显式平铺。上面的示例涵盖了标准的全连接层。