无法打印张量值

时间:2017-12-20 08:15:23

标签: python session roi tensor

我运行代码时遇到如下错误。 我想知道被称为“壮举”的Tensor的价值。

Traceback (most recent call last):
  File "croptest.py", line 80, in <module>
    print (sess.run(feat))
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 895, in run
    run_metadata_ptr)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1124, in _run
    feed_dict_tensor, options, run_metadata)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1321, in _do_run
    options, run_metadata)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1340, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.OutOfRangeError: box_ind has values outside [0, batch)
     [[Node: ROIAlign/Crop = CropAndResize[T=DT_UINT8, extrapolation_value=0, method="bilinear", _device="/job:localhost/replica:0/task:0/cpu:0"](ROIAlign/Crop/image, ROIAlign/Reshape_2, ROIAlign/Crop/box_ind, ROIAlign/Crop/crop_size)]]

Caused by op u'ROIAlign/Crop', defined at:
  File "croptest.py", line 73, in <module>
    feat =crop(img, boxes, batch_inds,16,7,7,'ROIAlign')
  File "croptest.py", line 64, in crop
    name='Crop')
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/ops/gen_image_ops.py", line 166, in crop_and_resize
    name=name)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 767, in apply_op
    op_def=op_def)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2630, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/home/ubuntu/Desktop/WK/my_project/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1204, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

OutOfRangeError (see above for traceback): box_ind has values outside [0, batch)
     [[Node: ROIAlign/Crop = CropAndResize[T=DT_UINT8, extrapolation_value=0, method="bilinear", _device="/job:localhost/replica:0/task:0/cpu:0"](ROIAlign/Crop/image, ROIAlign/Reshape_2, ROIAlign/Crop/box_ind, ROIAlign/Crop/crop_size)]]

输入图像是2个RGB图像; “...之前的所有代码 init = tf.global_variables_initializer()“可以运行,我打印张量的方式是错误的吗?有任何更好的方法来打印张量。 以下是我跑的代码:

 from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    import glob
    import tensorflow as tf
    import numpy as np
    import cv2 

def crop(images, boxes, batch_inds, stride, pooled_height, pooled_width, scope):
  """Cropping areas of features into fixed size
  Params:
  --------
  images: a 4-d Tensor of shape (N, H, W, C)
  boxes: rois in the original image, of shape (N, ..., 4), [x1, y1, x2, y2]
  batch_inds: 

  Returns:
  --------
  A Tensor of shape (N, pooled_height, pooled_width, C)
  """
  #print(tf.shape(images)) 
  with tf.name_scope(scope):
    boxes = [x / (stride+0.0) for x in boxes]
    boxes = tf.reshape(boxes, [-1, 4])
    print(images)
    # normalize the boxes and swap x y dimensions
    print(images.shape)
    shape = tf.shape(images)
    boxes = tf.reshape(boxes, [-1, 2]) # to (x, y)
    xs = boxes[:, 0] 
    ys = boxes[:, 1]
    xs = xs / tf.cast(shape[2], tf.float32)
    ys = ys / tf.cast(shape[1], tf.float32)
    boxes = tf.concat([ys[:, tf.newaxis], xs[:, tf.newaxis]], axis=1)
    boxes = tf.reshape(boxes, [-1, 4])  # to (y1, x1, y2, x2)
    assert_op = tf.Assert(tf.greater(tf.size(images), 0), [images, batch_inds])
    print(assert_op)
    print("-----------------------")
    print(images.astype('float'))
    print("-----------------------")
    print(batch_inds)
    x=images.astype('float')
    print("-----------------------")
    print(batch_inds)
    print("-----------------------")
    print(pooled_height)
    print("-----------------------")
    pools =[pooled_height, pooled_width]

    arg = tf.convert_to_tensor(x, dtype=tf.float32)
    arg1 = tf.convert_to_tensor(batch_inds)
    with tf.control_dependencies([assert_op, arg,arg1 ]):
        return  tf.image.crop_and_resize(images, boxes, batch_inds,
                                         pools,
                                         method='bilinear',
                                         name='Crop')
images = [cv2.imread(file) for file in glob.glob("/home/ubuntu/Pictures/TeImage/*.png")]
img= np.asarray(images)
boxes = [100, 100, 200, 200]
batch_inds=[2]
feat =crop(img, boxes, batch_inds,16,7,7,'ROIAlign')

init=tf.global_variables_initializer()
sess=tf.Session()
sess.run(init)
print (sess.run(feat))

1 个答案:

答案 0 :(得分:0)

我认为错误可能来自你使用tensorflow.shape,它看起来像是为张量设计的,也许图像数组不适合该函数的tnesor形式。但是,如果你将tf替换为np(bumpy.shape),它应该打印图像的形状,并完全按照预期的方式完成,但输入的灵活性更高。