重复使用tensorflow中的层重量



我正在使用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之上,所以我无法在此处发布代码示例。

有人知道我如何转移这些权重吗?

换位很简单:

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

将交换最后两个轴。

但是,正如@seven提到的,随着权重的总数的变化,这还不足以解决该错误。

相关内容

  • 没有找到相关文章

最新更新