TensorFlow MLP示例输出二进制而不是十进制

时间:2016-11-04 21:42:03

标签: python neural-network tensorflow artificial-intelligence

我试图根据给定的输入训练多层perseptron在真或假之间进行分类。 到目前为止,我使用的例子是:

  

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/multilayer_perceptron.py

但是这给了我输出作为二进制值,而我更喜欢基于小数或百分比的输出。

我尝试过的事情:

我尝试更改其他可用优化器但没有成功。

  

optimizer =   tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(成本)

1 个答案:

答案 0 :(得分:0)

优化器不会更改图层实际给出的输出。

提供的示例使用ReLu作为图层,这有利于分类,但模型概率不会起作用。相反,你最好使用sigmoid函数。

sigmoid函数可用于模拟概率,而ReLu可用于模拟正实数。

为了使其适用于提供的示例,请将multilayer_perceptron函数更改为:

def multilayer_perceptron(_X, _weights, _biases):
    layer_1 = tf.sigmoid(tf.add(tf.matmul(_X, _weights['h1']), _biases['b1']), name="sigmoid_l1") #Hidden layer with sigmoid activation
    layer_2 = tf.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2']), name="sigmoid_l2") #Hidden layer with sigmoid activation
    return tf.matmul(layer_2, _weights['out'], name="matmul_lout") + _biases['out']

它基本上取代了sigmoid的ReLu激活。

然后,为了评估,使用softmax如下:

output1 = tf.nn.softmax((multilayer_perceptron(x, weights, biases)), name="output")
avd = sess.run(output1, feed_dict={x: features_t})

每个班级将为您提供0到1之间的范围。此外,您可能需要增加时间段才能使其正常工作。