通常、活性化関数が 単一のニューロンに変換を適用するにはどうすればよいですか?
layer = tf.nn.relu(layer)
のように与えられた層の全てのニューロンに適用されますどのように私は唯一の第二のニューロンを言うために活性化関数を適用することができますか?
特定のニューロンにのみ特定の変換(たとえばtf.exp()
)を適用できますか?
列をスライスするために列をスライスすることはできません。行の数を知る必要があり、作成時に不明です。
通常、活性化関数が 単一のニューロンに変換を適用するにはどうすればよいですか?
layer = tf.nn.relu(layer)
のように与えられた層の全てのニューロンに適用されますどのように私は唯一の第二のニューロンを言うために活性化関数を適用することができますか?
特定のニューロンにのみ特定の変換(たとえばtf.exp()
)を適用できますか?
列をスライスするために列をスライスすることはできません。行の数を知る必要があり、作成時に不明です。
静的なテンソルと同じように、動的な形状のテンソルをスライスすることができます。ここで私は[?, 2]
テンソルにすべてをダウン剥奪し、それが0スライスです:
import numpy as np
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, shape=[None, 2], name='x')
layer = tf.nn.relu(x)
slice = layer[:, 0]
activation = tf.log(1 + tf.exp(slice))
with tf.Session() as session:
session.run(tf.global_variables_initializer())
layer_val, slice_val, activ_val = session.run([layer, slice, activation],
feed_dict={x: np.random.randn(10, 2)})
print layer_val[:, 0]
print slice_val
print activ_val
あなたはlayer_val[:, 0]
がslice_val
と同じであり、かつactiv_val
はその変換であることがわかります。
ありがとうございます。スライスを最初のテンソルに戻したかったので、私は精神的にブロックされていたと思うが、結局その必要はない。好奇心の念から(しかし、将来面白いかもしれません)スライスの「活性化」をレイヤー[:、0]に戻すことは可能でしょうか? – user11634
確かに、2つのスライスをスタックすることができます - https://www.tensorflow.org/api_docs/python/tf/stack – Maxim
ありがとう;私は 'tf.stack()'でエラーメッセージを受け取ったので、 'tf.concat()'に行きました。期待どおりに動作します。 – user11634
どのような特定のニューロンに留意していますか?誰でも? – Maxim
もっと正確には:私のニューラルネットワークの最後の層には2つの出力があり、厳密に正の値を得るために関数log(1 + exp())を通して2番目の出力を渡したいのですが、問題はかなり一般的ですあなたの質問への答えはどれですか)。それにもかかわらず、私はWeb上に何も解決策を見出していません。 – user11634
あなたの出力層の形状は '[?、2]'ですよね? '[:0]'スライス全体をいくつかの起動関数で渡したいのですか? – Maxim