私は現在、当初-v3のアーキテクチャを理解しようとしていますし、モデルの層の定義を詳しく見て取っていた。テンソルフローのスコープ内の引数をローカルに指定すると、同じタイプのすべての引数が上書きされますか?
with scopes.arg_scope([ops.conv2d, ops.max_pool, ops.avg_pool],stride=1, padding=’VALID’):
# 299 x 299 x 3
end_points[’conv0’] = ops.conv2d(inputs, 32, [3, 3], stride=2,scope=’conv0’)
# 149 x 149 x 32
end_points[’conv1’] = ops.conv2d(end_points[’conv0’], 32, [3, 3], scope=’conv1’)
# 147 x 147 x 32
end_points[’conv2’] = ops.conv2d(end_points[’conv1’], 64, [3, 3], padding=’SAME’, scope=’conv2’)
# 147 x 147 x 64
end_points[’pool1’] = ops.max_pool(end_points[’conv2’], [3, 3], stride=2, scope=’pool1’)
# 73 x 73 x 64
end_points[’conv3’] = ops.conv2d(end_points[’pool1’], 80, [1, 1], scope=’conv3’)
# 73 x 73 x 80.
end_points[’conv4’] = ops.conv2d(end_points[’conv3’], 192, [3, 3], scope=’conv4’)
# 71 x 71 x 192.
end_points[’pool2’] = ops.max_pool(end_points[’conv4’], [3, 3], stride=2, scope=’pool2’)
# 35 x 35 x 192.
net = end_points[’pool2’]
は、それぞれの層の寸法を確認し、私が最初に見てみなければなりませんでした異なるパディングスタイル:VALID
およびSAME
。 VALID
はエッジを破棄しますが、SAME
は実際に両側で均等にパッドされるため、コンボリューションはエッジでも機能します。 これは、たとえば、299x299ピクセルから149x149までの2番目のレイヤーを保持しているため、すべての奇数ピクセルのみを考慮します。[フィルタサイズ:[3,3]]で終わり、パディングは150x150ではなく149x149です。 VALID
(エッジは破棄されます)。同じフィルタサイズでこのレイヤーを再びコンボリューションしますが、今では1のストライドはエッジの「苦しみ」が破棄されるため147x147になります。このレイヤーは再び畳み込まれますが、今やひねられて、そのパディングはSAME
に設定され、前のレイヤーと同じ147x147のサイズになります。
が今私を混乱させるスポット来る: はと仮定しSAME
パディングがconv2
層に対してのみ有効だったと世界的にまだVALID
に設定されている、pool1
のディメンションが正しくによりエッジを廃棄する73x73として示されています。 次の畳み込みレイヤーに行くときは、それが71x71になると予想して、VALID
パディングをアクティブにしました。しかし、conv3
の出力は73x73のままであり、つまり、SAME
のパディングが使用されていることを意味します。しかし、conv4
では、埋め込みはVALID
と思われ、71x71にサイズを縮小すると完全に混乱します。スリムのarg_scope
のgithubの上のreadmeの
私は、引数のいずれかを設定すると、ローカルに与えられたグローバルな引数よりも優先されますことを、発見:
with slim.arg_scope([slim.ops.conv2d], padding='SAME', stddev=0.01, weight_decay=0.0005): net = slim.ops.conv2d(inputs, 64, [11, 11], scope='conv1') net = slim.ops.conv2d(net, 128, [11, 11], padding='VALID', scope='conv2') net = slim.ops.conv2d(net, 256, [11, 11], scope='conv3')
を例が示すように、arg_scopeの使用は、コード なりますよりシンプルで簡単に維持することができます。引数 はarg_scopeで指定されていますが、ローカルで上書きすることができます。 特に、パディング引数が 'SAME'に設定されている間に、 の第2のコンボリューションは、 'VALID'の値でオーバーライドします。
しかし、これはそうエッジと最終プーリング層pool2
を維持することは、その後も、37x37になり、パディングがSAME
になるのでconv4
も73x73の寸法を有するべきであること、を意味します。
私の欠点は何ですか?私のミスはどこですか? 私を助けてくれてありがとう、私は混乱している問題を明確にしたことを願っています。
あまり便利ではありませんが、用語は「畳み込み」であり、「畳み込み」ではありません。 :) –
@chris_anderson thx、それを変更しました:D – Martin