Skip to main content
 首页 » 编程设计

python之tensorflow 中的单神经元前馈网络

2024年10月01日32pander-it

我做了一个前馈单神经元网络。预测打印 0.5 而它应该打印 0.0。我对 tensorflow 很陌生。请帮我。这是我的代码:

""" 
O---(w1)-\ 
          \ 
O---(w2)-->Sum ---> Sigmoid ---> O  3 inputs and 1 output 
          / 
O---(w3)-/ 
 
          |   Input     | Output 
Example 1 | 0   0   1   |   0    
Example 2 | 1   1   1   |   1 
Example 3 | 1   0   1   |   1 
Exmaple 4 | 0   1   1   |   0 
 
""" 
 
import tensorflow as tf 
 
features = tf.placeholder(tf.float32, [None, 3]) 
labels = tf.placeholder(tf.float32, [None]) 
 
#Random weights 
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 
 
# Training 
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 = ', 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) 你的目标向量被转置 以下行使其可见 打印(sess.run(预测标签, feed_dict={特征:[[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]], 标签:[0, 1, 1, 0]})}))

结果是一个 4x4 矩阵。

你可以使用下面的代码实现你想要的结果

import tensorflow as tf 
 
features = tf.placeholder(tf.float32, [None, 3]) 
labels = tf.placeholder(tf.float32, [None,1]) 
 
#Random weights 
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)  
    # Training 
    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 = ', training_cost, 'W = ', classe) 
 
    print(sess.run(predict, 
                 feed_dict={features: [[0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]}))