Python Tensorflow输出层的不同激活函数
因此,我的问题似乎很简单,但我无法理解python tensorflow的语法。 我有一个简单的神经网络,有一个输入层,一个隐藏层和一个输出层。 输出层由两个神经元组成。 问题是:第一个输出神经元我想保持线性,而第二个输出神经元应该有一个S形激活函数。 我发现tensorflow中没有“切片作业”这类东西,但我没有找到任何解决方法 下面是一个示例片段:Python Tensorflow输出层的不同激活函数,python,tensorflow,machine-learning,neural-network,Python,Tensorflow,Machine Learning,Neural Network,因此,我的问题似乎很简单,但我无法理解python tensorflow的语法。 我有一个简单的神经网络,有一个输入层,一个隐藏层和一个输出层。 输出层由两个神经元组成。 问题是:第一个输出神经元我想保持线性,而第二个输出神经元应该有一个S形激活函数。 我发现tensorflow中没有“切片作业”这类东西,但我没有找到任何解决方法 下面是一个示例片段: def multilayer_perceptron(x, weights, biases,act_fct): layer_1 = tf
def multilayer_perceptron(x, weights, biases,act_fct):
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'], name='hidden_layer_op')
if (act_fct == 'sigmoid'):
layer_1 = tf.nn.sigmoid(layer_1)
print 'sigmoid'
elif (act_fct == 'relu'):
print 'relu'
layer_1 = tf.nn.relu(layer_1)
elif (act_fct == 'linear'):
print 'linear'
else :
print 'Unknown activation function'
sys.exit()
out_layer = tf.add(tf.matmul(layer_1, weights['out']), biases['out'], name='output_layer_op')
##DOES NOT WORK!
out_layer[1] = tf.nn.sigmoid(out_layer[1])
return out_layer
我相信有一个非常简单的方法可以做到这一点。不过希望有人能帮我。
P.S.(传递给函数的所有变量都已相应地预先初始化)
致以最良好的问候和感谢 我假设
层1
是一个具有形状(批次大小,2)
的张量。以下是一种方法:
import tensorflow as tf
batch_size = 3
layer_1 = tf.ones((batch_size, 2))
output_1 = layer_1[:, None, 0]
output_2 = tf.sigmoid(layer_1[:, None, 1])
output = tf.concat([output_1, output_2], axis=-1)
with tf.Session() as sess:
print(sess.run(output))
我假设
层1
是一个具有形状(批次大小,2)
的张量。以下是一种方法:
import tensorflow as tf
batch_size = 3
layer_1 = tf.ones((batch_size, 2))
output_1 = layer_1[:, None, 0]
output_2 = tf.sigmoid(layer_1[:, None, 1])
output = tf.concat([output_1, output_2], axis=-1)
with tf.Session() as sess:
print(sess.run(output))
非常感谢你的回答! 这帮助我找到了一个有效的解决方案 我有n_特征,输入神经元连接到20个隐藏的神经元。这20个输入神经元随后连接到2个输出神经元 所以层的形状是(批次大小,20)(或者实际上是(?,20))。 此外,我在tensorflow版本中遇到了一个关于concat的小问题(也不需要axis=)。关于您的版本,您可能需要写:
output = tf.concat(1,[output_1, output_2])
而不是
output = tf.concat([output_1, output_2],1)
无论如何,供将来参考,这里是工作代码(初始化和连接):
初始化:
weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1]),name='w_hidden'),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_1]),name='w_hidden2'),
'out1': tf.Variable(tf.random_normal([n_hidden_1, 1]),name='w_out_1'),
'out2': tf.Variable(tf.random_normal([n_hidden_1, 1]),name='w_out_2')
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1]),name='bias_hidden'),
'b2': tf.Variable(tf.random_normal([n_hidden_1]),name='bias_hidden2'),
'out1': tf.Variable(tf.random_normal([1]),name='bias_out1'),
'out2': tf.Variable(tf.random_normal([1]),name='bias_out2')
}
连接:
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'], name='hidden_layer_op')
layer_1 = tf.nn.sigmoid(layer_1)
print 'sigmoid'
output_1 = tf.add(tf.matmul(layer_1[0, None, :], weights['out1']), biases['out1'], name='output_layer_op1')
output_2 = tf.add(tf.matmul( layer_1[1, None, :], weights['out2']), biases['out2'], name='output_layer_op1')
output_2 = tf.sigmoid(output_2)
out_layer = tf.concat(1,[output_1, output_2])
return out_layer
谢谢并致以最良好的问候 非常感谢您的回答! 这帮助我找到了一个有效的解决方案 我有n_特征,输入神经元连接到20个隐藏的神经元。这20个输入神经元随后连接到2个输出神经元 所以层的形状是(批次大小,20)(或者实际上是(?,20))。 此外,我在tensorflow版本中遇到了一个关于concat的小问题(也不需要axis=)。关于您的版本,您可能需要写:
output = tf.concat(1,[output_1, output_2])
而不是
output = tf.concat([output_1, output_2],1)
无论如何,供将来参考,这里是工作代码(初始化和连接):
初始化:
weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1]),name='w_hidden'),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_1]),name='w_hidden2'),
'out1': tf.Variable(tf.random_normal([n_hidden_1, 1]),name='w_out_1'),
'out2': tf.Variable(tf.random_normal([n_hidden_1, 1]),name='w_out_2')
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1]),name='bias_hidden'),
'b2': tf.Variable(tf.random_normal([n_hidden_1]),name='bias_hidden2'),
'out1': tf.Variable(tf.random_normal([1]),name='bias_out1'),
'out2': tf.Variable(tf.random_normal([1]),name='bias_out2')
}
连接:
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'], name='hidden_layer_op')
layer_1 = tf.nn.sigmoid(layer_1)
print 'sigmoid'
output_1 = tf.add(tf.matmul(layer_1[0, None, :], weights['out1']), biases['out1'], name='output_layer_op1')
output_2 = tf.add(tf.matmul( layer_1[1, None, :], weights['out2']), biases['out2'], name='output_layer_op1')
output_2 = tf.sigmoid(output_2)
out_layer = tf.concat(1,[output_1, output_2])
return out_layer
谢谢并致以最良好的问候