通常情况下,激活函数会应用于给定层的所有神经元,如下所示:
layer = tf.nn.relu(layer)
如何仅对第二个神经元应用激活函数呢?
如何仅对特定神经元应用特定的变换(比如tf.exp()
)呢?
切片列在这里无法应用,因为要切片列我需要知道行数,而在构建时行数是未知的。
回答:
你可以对动态形状的张量进行切片操作,就像对静态张量一样。这里我将一切简化为一个[?, 2]
的张量及其第0片:
import numpy as npimport tensorflow as tfx = 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
则是其变换结果。