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

我正在尝试训练一个多层感知器来根据给定的输入对真假进行分类。到目前为止,我使用的是以下示例:

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

但这给我的输出是一个二进制值,我更希望得到一个基于小数或百分比的输出。

我尝试过的方法:

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

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)


回答:

优化器不会改变由层实际给出的输出。

提供的示例使用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") #带有sigmoid激活的隐藏层    layer_2 = tf.sigmoid(tf.add(tf.matmul(layer_1, _weights['h2']), _biases['b2']), name="sigmoid_l2") #带有sigmoid激活的隐藏层    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之间的范围。此外,你可能需要增加epoch的数量才能使其工作。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注