在Tensorflow中重用图层权重

时间:2017-03-09 15:57:28

标签: tensorflow autoencoder tf-slim

我使用tf.slim来实现自动编码器。我完全卷积了以下架构:

[conv, outputs = 1] => [conv, outputs = 15] => [conv, outputs = 25] =>
=> [conv_transpose, outputs = 25] => [conv_transpose, outputs = 15] => 
[conv_transpose, outputs = 1]

它必须是完全卷积的,我不能集合(更大问题的局限性)。我想使用绑定权重,所以

encoder_W_3 = decoder_W_1_Transposed 

(因此第一个解码器层的权重是最后一个编码器层的权重,转置)。

如果我重复使用权重tfslim允许你重复使用它们,即reuse = True然后只提供你想要重用的层的范围名称,我就会出现大小问题:

ValueError: Trying to share variable cnn_block_3/weights, but specified shape (21, 11, 25, 25) and found shape (21, 11, 15, 25).

如果您不转置以前型号的重量,这是有道理的。有没有人知道如何转换这些重量?

PS:我知道这是非常抽象和挥手,但我正在使用自定义api,在tfslim之上,所以我不能在这里发布代码示例。

1 个答案:

答案 0 :(得分:2)

  

有没有人知道如何转换这些重量?

转换很简单:

new_weights = tf.transpose(weights, perm=[0, 1, 3, 2])

将交换最后两个轴。

然而,正如@Seven所提到的,当重量总数发生变化时,这不足以解决错误。