2017-10-22 10 views
0

通常、活性化関数が 単一のニューロンに変換を適用するにはどうすればよいですか?

layer = tf.nn.relu(layer) 
のように与えられた層の全てのニューロンに適用されますどのように私は唯一の第二のニューロンを言うために活性化関数を適用することができますか?

特定のニューロンにのみ特定の変換(たとえばtf.exp())を適用できますか?

列をスライスするために列をスライスすることはできません。行の数を知る必要があり、作成時に不明です。

+0

どのような特定のニューロンに留意していますか?誰でも? – Maxim

+0

もっと正確には:私のニューラルネットワークの最後の層には2つの出力があり、厳密に正の値を得るために関数log(1 + exp())を通して2番目の出力を渡したいのですが、問題はかなり一般的ですあなたの質問への答えはどれですか)。それにもかかわらず、私はWeb上に何も解決策を見出していません。 – user11634

+0

あなたの出力層の形状は '[?、2]'ですよね? '[:0]'スライス全体をいくつかの起動関数で渡したいのですか? – Maxim

答えて

1

静的なテンソルと同じように、動的な形状のテンソルをスライスすることができます。ここで私は[?, 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

ありがとうございます。スライスを最初のテンソルに戻したかったので、私は精神的にブロックされていたと思うが、結局その必要はない。好奇心の念から(しかし、将来面白いかもしれません)スライスの「活性化」をレイヤー[:、0]に戻すことは可能でしょうか? – user11634

+0

確かに、2つのスライスをスタックすることができます - https://www.tensorflow.org/api_docs/python/tf/stack – Maxim

+0

ありがとう;私は 'tf.stack()'でエラーメッセージを受け取ったので、 'tf.concat()'に行きました。期待どおりに動作します。 – user11634

関連する問題