私はtf.slimを使用して自動エンコーダーを実装しています。私は、次のアーキテクチャと完全にたたみ込みます:Tensorflowでのレイヤーウェイトの再利用
[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
(第1のデコーダ層のように重みが最後のエンコーダ層のもの、転置されています)。
私は重みにtfslimは、あなたがそれらを再利用することができます通常の方法を再利用した場合、すなわちリユース=真、その後、ちょうどあなたが再利用したい層のスコープ名を提供し、私はサイズの問題を得る:
ValueError: Trying to share variable cnn_block_3/weights, but specified shape (21, 11, 25, 25) and found shape (21, 11, 15, 25).
これは作ります前のモデルのウェイトを転置しないと、意味があります。どのように私はこれらの重量を転置することができますか?
PS:これは非常に抽象的で手を振っていることはわかっていますが、私はtfslimの上にカスタムapiを使って作業していますので、ここでコード例を投稿することはできません。
私が知っているように、Tensorflowの重みは '[filter_height、filter_width、in_channels、out_channels]'のような形をしています。私は、各レイヤーで同じフィルターサイズを使用していると仮定します。したがって、ウェイトをトランスポーズするとき、デコーダとコーダーの対応が必要ですか?例えば、[outputs = 1] => [outputs = 15]は '[outputs = 15] => [outputs = 1]'だけで使用できます。エラーメッセージから、 '25 => 25 'に' 15 => 25 'が割り当てられていると思います。しかし、これらの2つのレイヤーの重みの数が異なる場合、それらをどのように共有することができますか? – Seven