2017-05-24 91 views
1

我做了一個前饋單神經元網絡。預測打印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(預測的標籤)** 2)

+0

標籤取得了理想的結果 - 預測是不是一個有效的錯誤,也許你的意思tf.reduce_mean((標籤 - 預測)** 2)? – lejlot

回答

1

你有兩個錯誤

(一)你原來的誤差函數優化錯了目標

(二)目標載體轉 下面一行使它可見 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]})}))

結果是一個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]]}))