TensorFlow CIFAR10 cifar10_eval.py throws error: Compute status: Invalid argument: Assign requires shapes of both tensors to match

TensorFlow CIFAR10 cifar10_eval.py throws error: Compute status: Invalid argument: Assign requires shapes of both tensors to match

我正在 运行在 TensorFlow 包中提供的 CIFAR10 示例上设置 SVHN 数据集。我所做的只是更改数据的源目录,并在这里或那里修改几行代码。我可以成功训练网络。

但是,当我 运行 svhn_eval.py(等同于 cifar10_eval.py,名称已更改,因此我知道如何组织我的文件)时,我得到了这个错误 assign requires shape of两个张量匹配。我想问题可能是由于

saver.restore(sess, ckpt.model_checkpoint_path)

跟踪到此结束并深入到 TensorFlow 的其他文件。有谁知道如何解决这个问题?

W tensorflow/core/common_runtime/executor.cc:1076] 0x1a5bad0 Compute status: Invalid argument: Assign requires shapes of both tensors to match. lhs shape= [2304,384] rhs shape= [4096,384]
     [[Node: save/Assign_5 = Assign[T=DT_FLOAT, use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](local3/weights, save/restore_slice_5)]]
Traceback (most recent call last):
  File "/home/samuelchin/svhn/svhn_eval.py", line 161, in <module>
    tf.app.run()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/default/_app.py", line 30, in run
    sys.exit(main(sys.argv))
  File "/home/samuelchin/svhn/svhn_eval.py", line 157, in main
    evaluate()
  File "/home/samuelchin/svhn/svhn_eval.py", line 147, in evaluate
    eval_once(saver, summary_writer, top_k_op, summary_op)
  File "/home/samuelchin/svhn/svhn_eval.py", line 78, in eval_once
    saver.restore(sess, ckpt.model_checkpoint_path)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 891, in restore
    sess.run([self._restore_op_name], {self._filename_tensor_name: save_path})
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 373, in run
    results = self._do_run(target_list, unique_fetch_targets, feed_dict_string)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 449, in _do_run
    e.code)
tensorflow.python.framework.errors.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [2304,384] rhs shape= [4096,384]
     [[Node: save/Assign_5 = Assign[T=DT_FLOAT, use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](local3/weights, save/restore_slice_5)]]
Caused by op u'save/Assign_5', defined at:
  File "/home/samuelchin/svhn/svhn_eval.py", line 161, in <module>
    tf.app.run()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/default/_app.py", line 30, in run
    sys.exit(main(sys.argv))
  File "/home/samuelchin/svhn/svhn_eval.py", line 157, in main
    evaluate()
  File "/home/samuelchin/svhn/svhn_eval.py", line 137, in evaluate
    saver = tf.train.Saver(variables_to_restore)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 713, in __init__
    restore_sequentially=restore_sequentially)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 432, in build
    filename_tensor, vars_to_save, restore_sequentially, reshape)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 202, in _AddRestoreOps
    validate_shape=not reshape))
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_state_ops.py", line 40, in assign
    use_locking=use_locking, name=name)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 660, in apply_op
    op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1850, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1049, in __init__
    self._traceback = _extract_stack()

编辑 1:我更改的代码行在 distorted_inputs 中。在原始的 CIFAR10 中,从 32x32 随机裁剪到 24x24 图片。但是,在 SVHN 实现中,我输入了 32x32 图像。根据输出错误,我们可以找出问题所在。

lhs shape= [2304,384] rhs shape= [4096,384]
2304 = 24 * 24 * 4
4096 = 32 * 32 * 4

我们现在要问自己的问题是,为什么要乘以 4?

解决方案是 cifar10.py 有一个名为 IMAGE_SIZE 的变量。我将其保留为 24,因为我认为它不会影响任何事情。但是,发生的情况是,当您尝试 运行 测试集时,输入被裁剪为 IMAGE_SIZE x IMAGE_SIZE.

的大小

因此,当它没有改变时,张量维度不匹配。将该变量更改为 32 即可。