返回大于预期值的tf.reduce_sum

时间:2017-05-26 17:05:38

标签: python tensorflow

我正在尝试编写一个神经网络,它接受输入功能并返回输出。但是,我想检查一下"正确性"通过将输出与实际输出进行比较来获得NN。同时,我想允许该指标考虑输出的不确定性。让我们说如果预测输出与实际输出相距1个单位,则将预测输出计为正确。

代码意图:检查是否| 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})

1 个答案:

答案 0 :(得分:0)

找到错误的来源。

在这种情况下,val_label来自一个名为 data 的较大的numpy数组。标签位于数据数组的最后一列。

val_label = data[:, -1]

这显然返回了一个维度(10000)的数组,它是一个向量

当将其与尺寸为(10 000,1)的val_labels张量进行比较时,发生了错误。

修复是为了确保val_label数组具有维度(10 000,1),这样做是这样的:

val_label = data[:, -1:]

或:

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

重新评估张量流图将返回正确的预期输出