我正在使用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提到的,随着权重的总数的变化,这还不足以解决该错误。