Tensorflow InvalidArgumentError:登录和标签的大小必须相同:登录\u大小=[1,2]标签\u大小=[1,1]

Tensorflow InvalidArgumentError:登录和标签的大小必须相同:登录\u大小=[1,2]标签\u大小=[1,1],tensorflow,Tensorflow,我曾经处理过一些其他的错误,但是我以前从未见过这个错误,甚至在做了一些研究之后,我仍然不确定到底是什么问题或者如何解决它 我猜在某一点上重塑数据是必要的,但我不明白为什么这是一个问题,或者[1,2]和[1,1]的大小实际上意味着什么 输入到脚本中的数据是[128 x 128 x 128 nArray,二进制标签] 我使用的代码是: import tensorflow as tf import numpy as np import os import math # input arrays x

我曾经处理过一些其他的错误,但是我以前从未见过这个错误,甚至在做了一些研究之后,我仍然不确定到底是什么问题或者如何解决它

我猜在某一点上重塑数据是必要的,但我不明白为什么这是一个问题,或者[1,2]和[1,1]的大小实际上意味着什么

输入到脚本中的数据是[128 x 128 x 128 nArray,二进制标签]

我使用的代码是:

import tensorflow as tf
import numpy as np
import os
import math

# input arrays
x = tf.placeholder(tf.float32, [None, 128, 128, 128, 1])
# labels
y = tf.placeholder(tf.float32, None)
# learning rate
lr = tf.placeholder(tf.float32)

##### Code for ConvNet is here #####

# Data
INPUT_FOLDER = 'data/cubed_data/pp/labelled'
images = os.listdir(INPUT_FOLDER)
images.sort()

td = []
count = 1
for i in images:
    im = np.load(INPUT_FOLDER + "/" + i)
    data = im[0]
    data = np.reshape(data, (128, 128, 128, 1))
    label = im[1]
    lbd = [data, label]
    td.append(lbd)
test_data = td[:100]
train_data = td[100:]

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=fc3l, labels=y)

correct_prediction = tf.equal(tf.argmax(probs, 1), tf.argmax(y, 0))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

train_step = tf.train.AdamOptimizer(lr).minimize(cross_entropy)

# init
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

def training_step(i, update_test_data, update_train_data):

    for a in range(len(train_data)):

        batch = train_data[a]
        batch_x = batch[0]
        batch_y = batch[1]

        # learning rate decay
        max_learning_rate = 0.003
        min_learning_rate = 0.0001
        decay_speed = 2000.0
        learning_rate = min_learning_rate + (max_learning_rate - min_learning_rate) * math.exp(-i / decay_speed)

        if update_train_data:
            a, c = sess.run([accuracy, cross_entropy], {x: [batch_x], y: [batch_y]})
            print(str(i) + ": accuracy:" + str(a) + " loss: " + str(c) + " (lr:" + str(learning_rate) + ")")


        if update_test_data:
            a, c = sess.run([accuracy, cross_entropy], {x: [test_data[0]], y: [test_data[1]]})
        print(str(i) + ": ********* epoch " + " ********* test accuracy:" + str(a) + " test loss: " + str(c))

        sess.run(train_step, {x: [batch_x], y: [batch_y], lr: learning_rate})

for q in range(10000 + 1):
    training_step(q, q % 100 == 0, q % 20 == 0)
…与:

Invalid argument: logits and labels must be same size: logits_size=[1,2] labels_size=[1,1]
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Reshape, Reshape_1)]]
Traceback (most recent call last):
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 972, in _do_call
    return fn(*args)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 954, in _run_fn
    status, run_metadata)
  File "/usr/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/framework/errors.py", line 463, in raise_exception_on_not_ok_status
    pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors.InvalidArgumentError: logits and labels must be same size: logits_size=[1,2] labels_size=[1,1]
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Reshape, Reshape_1)]]
     [[Node: Reshape_2/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_233_Reshape_2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tfvgg.py", line 293, in <module>
    training_step(q, q % 100 == 0, q % 20 == 0)
  File "tfvgg.py", line 282, in training_step
    a, c = sess.run([accuracy, cross_entropy], {x: [batch_x], y: [batch_y]})
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 717, in run
    run_metadata_ptr)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 915, in _run
    feed_dict_string, options, run_metadata)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 965, in _do_run
    target_list, options, run_metadata)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 985, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors.InvalidArgumentError: logits and labels must be same size: logits_size=[1,2] labels_size=[1,1]
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Reshape, Reshape_1)]]
     [[Node: Reshape_2/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_233_Reshape_2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

Caused by op 'SoftmaxCrossEntropyWithLogits', defined at:
  File "tfvgg.py", line 254, in <module>
    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=fc3l, labels=y)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/ops/nn_ops.py", line 676, in softmax_cross_entropy_with_logits
    precise_logits, labels, name=name)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 1744, in _softmax_cross_entropy_with_logits
    features=features, labels=labels, name=name)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op
    op_def=op_def)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 2380, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/entelechy/tfenv/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 1298, in __init__
    self._traceback = _extract_stack()

InvalidArgumentError (see above for traceback): logits and labels must be same size: logits_size=[1,2] labels_size=[1,1]
     [[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](Reshape, Reshape_1)]]
     [[Node: Reshape_2/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_233_Reshape_2", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
无效参数:logits和标签的大小必须相同:logits\u size=[1,2]labels\u size=[1,1]
[[Node:SoftmaxCrossEntropyWithLogits=SoftmaxCrossEntropyWithLogits[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/gpu:0”](重塑,重塑\u 1)]]
回溯(最近一次呼叫最后一次):
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第972行,在
返回fn(*args)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第954行,在
状态,运行(元数据)
文件“/usr/lib/python3.5/contextlib.py”,第66行,在__
下一个(self.gen)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/framework/errors.py”,第463行,处于引发异常状态
pywrap_tensorflow.TF_GetCode(状态))
tensorflow.python.framework.errors.InvalidArgumentError:logits和labels的大小必须相同:logits\u size=[1,2]labels\u size=[1,1]
[[Node:SoftmaxCrossEntropyWithLogits=SoftmaxCrossEntropyWithLogits[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/gpu:0”](重塑,重塑\u 1)]]
[[Node:Reformate_2/_7=_Recv[client_terminated=false,Recv_device=“/job:localhost/replica:0/task:0/cpu:0”,send_device=“/job:localhost/replica:0/task:0/gpu:0”,send_device_化身=1,tensor_name=“edge_233;_Reformate_2”,tensor_type=DT_FLOAT,_device=“/job:localhost/replica:0/task:0/cpu:0”()]
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“tfvgg.py”,第293行,在
训练步骤(q,q%100==0,q%20==0)
文件“tfvgg.py”,第282行,在培训步骤中
a、 c=sess.run([精度,交叉熵],{x:[batch\ux],y:[batch\uy]})
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第717行,正在运行
运行_元数据_ptr)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第915行,正在运行
提要(dict字符串、选项、运行元数据)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第965行,运行
目标\u列表、选项、运行\u元数据)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/client/session.py”,第985行,在
提升类型(e)(节点定义、操作、消息)
tensorflow.python.framework.errors.InvalidArgumentError:logits和labels的大小必须相同:logits\u size=[1,2]labels\u size=[1,1]
[[Node:SoftmaxCrossEntropyWithLogits=SoftmaxCrossEntropyWithLogits[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/gpu:0”](重塑,重塑\u 1)]]
[[Node:Reformate_2/_7=_Recv[client_terminated=false,Recv_device=“/job:localhost/replica:0/task:0/cpu:0”,send_device=“/job:localhost/replica:0/task:0/gpu:0”,send_device_化身=1,tensor_name=“edge_233;_Reformate_2”,tensor_type=DT_FLOAT,_device=“/job:localhost/replica:0/task:0/cpu:0”()]
由op“SoftmaxCrossEntropyWithLogits”引起,定义于:
文件“tfvgg.py”,第254行,在
交叉熵=tf.nn.softmax\u交叉熵\u与逻辑项(逻辑项=fc3l,标签=y)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/ops/nn_ops.py”,第676行,在softmax_cross_entropy_中,带有logits
精确(登录、标签、名称=名称)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/ops/gen_nn_ops.py”,第1744行,在带有登录的softmax交叉熵中
要素=要素,标签=标签,名称=名称)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/framework/op_def_library.py”,第749行,在apply_op
op_def=op_def)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/framework/ops.py”,第2380行,在create_op中
初始值=自身值。\默认值\初始值,初始值=初始值)
文件“/home/entelechy/tfenv/lib/python3.5/site packages/tensorflow/python/framework/ops.py”,第1298行,在__
self.\u traceback=\u extract\u stack()
InvalidArgumentError(回溯见上文):登录和标签的大小必须相同:登录\u大小=[1,2]标签\u大小=[1,1]
[[Node:SoftmaxCrossEntropyWithLogits=SoftmaxCrossEntropyWithLogits[T=DT\u FLOAT,\u device=“/job:localhost/replica:0/task:0/gpu:0”](重塑,重塑\u 1)]]
[[Node:Reformate_2/_7=_Recv[client_terminated=false,Recv_device=“/job:localhost/replica:0/task:0/cpu:0”,send_device=“/job:localhost/replica:0/task:0/gpu:0”,send_device_化身=1,tensor_name=“edge_233;_Reformate_2”,tensor_type=DT_FLOAT,_device=“/job:localhost/replica:0/task:0/cpu:0”()]

仔细查看后,我发现问题在于第三个完全连接的层的输出是2个类,而标签是单个类的二进制。更改了最后一个完全连接层中的代码以解释单个类,此错误已得到解决。

在调用
sess.run([准确度,交叉熵],…)
交叉熵从何而来?为交叉熵函数添加了代码