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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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