使用TensorFlow构建单神经元前馈网络

我构建了一个单神经元前馈网络。预测结果显示为0.5,但实际上应该显示为0.0。我对TensorFlow还不太熟,请帮助我。这是我的代码:

"""O---(w1)-\          \O---(w2)-->Sum ---> Sigmoid ---> O  3个输入和1个输出          /O---(w3)-/          |   输入     | 输出示例1 | 0   0   1   |   0   示例2 | 1   1   1   |   1示例3 | 1   0   1   |   1示例4 | 0   1   1   |   0"""import tensorflow as tffeatures = tf.placeholder(tf.float32, [None, 3])labels = tf.placeholder(tf.float32, [None])#随机权重W = tf.Variable([[-0.16595599], [0.44064899], [-0.99977125]], tf.float32)init = tf.initialize_all_variables()sess = tf.Session()sess.run(init)predict = tf.nn.sigmoid(tf.matmul(features, W))error = labels - predict# 训练optimizer = tf.train.GradientDescentOptimizer(0.01)train = optimizer.minimize(error)for i in range(10000):    sess.run(train, feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels: [0, 1, 1, 0]})training_cost = sess.run(error, feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels: [0, 1, 1, 0]})print('训练成本 = ', training_cost, 'W = ', sess.run(W))print(sess.run(predict, feed_dict={features:[[0, 1, 1]]}))

我还手动使用numpy构建了这个模型,运行得很好。

编辑:我尝试了所有类型的成本函数,包括 tf.reduce_mean(predict-labels)**2)


回答:

你有两个错误

(a) 你的原始错误函数优化了错误的目标

(b) 你的目标向量被转置了。以下这行代码可以显示出来 print(sess.run(predict-label, feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels: [0, 1, 1, 0]})}))

结果是一个4×4的矩阵。

你可以使用以下代码达到预期的结果

import tensorflow as tffeatures = tf.placeholder(tf.float32, [None, 3])labels = tf.placeholder(tf.float32, [None,1])#随机权重W = tf.Variable([[10.0], [000.0], [0.200]], tf.float32)init = tf.initialize_all_variables()with tf.Session() as sess:    sess.run(init)    predict = tf.nn.sigmoid(tf.matmul(features, W))    print(sess.run(predict, feed_dict={features:[[0, 1, 1]]}))    lbls= [[0], [1], [1], [0]]    print(sess.run(predict,                 feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels:lbls}))    #    error = labels - predict    error = tf.reduce_mean((labels - predict)**2)     # 训练    optimizer = tf.train.GradientDescentOptimizer(10)    train = optimizer.minimize(error)    for i in range(100):        sess.run(train,        feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], labels: lbls})        training_cost = sess.run(error,                             feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]],                                        labels: lbls})        classe = sess.run((labels-predict),                             feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]],                                        labels: lbls})        print('训练成本 = ', training_cost, 'W = ', classe)    print(sess.run(predict,                 feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]}))

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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