私は単純なニューラルネットワークで異なる起動機能を試しています。tensorflowでtf.nn.creluを使用するには?
tf.nn.relu
、tf.nn.sigmoid
を使用しても問題ありません。ネットワークが行うべきことを行います。
しかし、私がtf.nn.crelu
を使用している場合は、寸法誤差があります。
[max, min]
のようなものが返され、幅の寸法が2倍大きくなります。 私は何をしなければなりませんか?次の重みと偏りをcrelu
の出力に当てはめますか?
私は単純なニューラルネットワークで異なる起動機能を試しています。tensorflowでtf.nn.creluを使用するには?
tf.nn.relu
、tf.nn.sigmoid
を使用しても問題ありません。ネットワークが行うべきことを行います。
しかし、私がtf.nn.crelu
を使用している場合は、寸法誤差があります。
[max, min]
のようなものが返され、幅の寸法が2倍大きくなります。 私は何をしなければなりませんか?次の重みと偏りをcrelu
の出力に当てはめますか?
ネットワークを手動で構築する場合は、次のレイヤーのサイズをtf.nn.crelu
出力に合わせて調整する必要があります。あなたは高レベルAPIを使用する場合は、この意味では、tf.nn.crelu
等、tf.nn.relu
、tf.nn.elu
との互換性がないある
状況は、例えば、単純ですtensorflow slim。この場合、レイヤー機能は一致する寸法を処理しているため、tf.nn.relu
をtf.nn.crelu
と簡単に置き換えてコードに置き換えることができます。しかし、ネットワークは黙って2倍になっています。
はここに例を示します
with slim.arg_scope([slim.conv2d, slim.fully_connected],
activation_fn=tf.nn.crelu,
normalizer_fn=slim.batch_norm,
normalizer_params={'is_training': is_training, 'decay': 0.95}):
conv1 = slim.conv2d(x_image, 16, [5, 5], scope='conv1')
pool1 = slim.max_pool2d(conv1, [2, 2], scope='pool1')
conv2 = slim.conv2d(pool1, 32, [5, 5], scope='conv2')
pool2 = slim.max_pool2d(conv2, [2, 2], scope='pool2')
flatten = slim.flatten(pool2)
fc = slim.fully_connected(flatten, 1024, scope='fc1')
drop = slim.dropout(fc, keep_prob=keep_prob)
logits = slim.fully_connected(drop, 10, activation_fn=None, scope='logits')
slim.arg_scope
は、単に特定のactivation_fn
に、下の層にすべての提供の引数を適用します。出力ディメンションを修正する最後のレイヤーにactivation_fn=None
も書き留めます。完全なコードはfound hereです。
CReLu活性化の陽性部分のみを選択するReLUと、活性化の陰性部分のみを選択するReLUとを連結する。その結果、この非線形性は活性化の深さを2倍にすることに注意してください。あなたはここでもっと読むことができます。 https://www.tensorflow.org/api_docs/python/tf/nn/crelu –
はい、これはそれが何をしています。どのように使用するのですか? – j35t3r
下のリンクをチェックすることができますか?例の実装が含まれています(チェーンャーからのcreluを使用しますが、テンソルフローと非常によく似ています)https://programtalk.com/vs2/python/10099/chainer/tests/chainer_tests/functions_tests/ activation_tests/test_crelu.py / –