TensorFlow MLP 示例输出二进制而不是十进制
TensorFlow MLP example outputs binary instead of decimal
我正在尝试训练多层感知器根据给定的输入在真假之间进行分类。
到目前为止,我正在使用示例:
但这给了我一个二进制值的输出,我宁愿有一个基于小数或百分比的输出。
我尝试过的:
我尝试更改其他可用优化器但没有成功。
optimizer =
tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
优化器不会改变层实际给出的输出。
提供的示例对层使用 ReLu,这对 class化很有用,但对概率建模它不起作用。你最好使用 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']
它基本上取代了 S 型函数的 ReLu 激活。
然后,对于评估,使用 softmax 如下:
output1 = tf.nn.softmax((multilayer_perceptron(x, weights, biases)), name="output")
avd = sess.run(output1, feed_dict={x: features_t})
它将为每个 class 提供 0 到 1 之间的范围。此外,您可能必须增加纪元数才能使其正常工作。
我正在尝试训练多层感知器根据给定的输入在真假之间进行分类。 到目前为止,我正在使用示例:
但这给了我一个二进制值的输出,我宁愿有一个基于小数或百分比的输出。
我尝试过的:
我尝试更改其他可用优化器但没有成功。
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
优化器不会改变层实际给出的输出。
提供的示例对层使用 ReLu,这对 class化很有用,但对概率建模它不起作用。你最好使用 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']
它基本上取代了 S 型函数的 ReLu 激活。
然后,对于评估,使用 softmax 如下:
output1 = tf.nn.softmax((multilayer_perceptron(x, weights, biases)), name="output")
avd = sess.run(output1, feed_dict={x: features_t})
它将为每个 class 提供 0 到 1 之间的范围。此外,您可能必须增加纪元数才能使其正常工作。