2017-05-26 68 views
-1

我想編碼一個採用輸入功能並返回輸出的神經網絡。不過,我想通過比較輸出與實際輸出來檢查NN的「正確性」。同時,我想讓這個指標能夠解釋產出的不確定性。假設預測輸出與實際輸出相差1個單位以內,請將該預測輸出計數爲正確。tf.reduce_sum返回大於預期值

代碼意圖:檢查| x-y |小於或等於1,如果這樣的話所有發生的事情都是真的。基本上,我可以知道有多少案件是真的。

這裏是下面的代碼,

correct = tf.reduce_sum(tf.cast(tf.less_equal(tf.abs(x - y), 1), tf.int32)) 
correct.eval({x: predicted_output, y = real_output}) 

當我路過一個小名單的字典(下面的代碼),我能回到正確的結果:

{x: [1,2,3,4,5], y: [1,2,3,1,1,]} 

然而,當我通過預測產量實際產量這是長度10 000,有時返回值是更多 10 000.

我正確地認爲返回值必須小於10 000嗎?如果是,那麼我會犯什麼錯誤,導致回報值超過10 000?

編輯以包括完整的上下的代碼:

def neural_network_model(data): 
hidden_1_layer = {"weights": tf.Variable(tf.random_normal([n_input, n_nodes_hl1])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl1]))} 
hidden_2_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl2]))} 
hidden_3_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 
        "biases": tf.Variable(tf.random_normal([n_nodes_hl3]))} 
output_layer = {"weights": tf.Variable(tf.random_normal([n_nodes_hl3, n_output])), 
        "biases": tf.Variable(tf.random_normal([n_output]))} 

l1 = tf.add(tf.matmul(data, hidden_1_layer["weights"]), hidden_1_layer["biases"]) 
l1 = tf.nn.relu(l1) 

l2 = tf.add(tf.matmul(l1, hidden_2_layer["weights"]), hidden_2_layer["biases"]) 
l2 = tf.nn.relu(l2) 

l3 = tf.add(tf.matmul(l2, hidden_3_layer["weights"]), hidden_3_layer["biases"]) 
l3 = tf.nn.relu(l3) 

output = tf.matmul(l3, output_layer["weights"]) + output_layer["biases"] 

return output 

prediction = neural_network_model(x) 
correct = tf.reduce_sum(tf.cast(tf.less_equal(tf.abs(prediction - y), 1), tf.int32)) 
correct.eval({x: val_features, y: val_label}) 
+0

適用於我隨機整數。你能告訴我你有多少班嗎?是10000嗎?你檢查了x和y的最大值和最小值嗎? – hars

+0

@hars類的數量是一個。其單個連續輸出NN。我編輯了這個問題以包含更多關於代碼的信息。 未包含在編輯中,正在運行培訓課程。在檢查正確之前。 –

+0

您是否檢查過它的x,y和帽子值的大小? – hars

回答

0

實測值的誤差的來源。

在這種情況下,val_label取自一個較大的numpy數組,名爲數據。該標籤位於數據陣列的最後一列。

val_label = data[:, -1] 

這顯然返回與尺寸的陣列(10 000)當此相比val_labels的張量,其是尺寸(10 000,1)發生了錯誤,是矢量

的修復是確保val_label陣列是尺寸(10 000,1),其像這樣完成:

val_label = data[:, -1:] 

或:

val_label = data[:, -1] 
val_label = val_label.reshape((-1,1)) 

重新評估tensorflow圖形將然後返回正確的預期輸出