Как я могу проверить содержимое моего тензора, используя стремительное выполнение TensorFlow? - PullRequest
1 голос
/ 15 мая 2019

Я использую TensorFlow 1.12, используя стремительное выполнение, и у меня есть следующая (неполная) функция, в которой я хочу проверить некоторый промежуточный тензор:

def parse_example(example_proto, width, height, num_classes):
    features = {
        'image/encoded': tf.FixedLenFeature((), tf.string),
        'image/height': tf.FixedLenFeature((), tf.int64),
        'image/width': tf.FixedLenFeature((), tf.int64),
        'image/filename': tf.FixedLenFeature((), tf.string),
        'image/object/bbox/xmin': tf.VarLenFeature(tf.float32),
        'image/object/bbox/xmax': tf.VarLenFeature(tf.float32),
        'image/object/bbox/ymin': tf.VarLenFeature(tf.float32),
        'image/object/bbox/ymax': tf.VarLenFeature(tf.float32),
        'image/object/class/label': tf.VarLenFeature(tf.int64),
        'image/object/class/text': tf.VarLenFeature(tf.string),
        'image/object/mask': tf.VarLenFeature(tf.string),
        'image/depth': tf.FixedLenFeature((), tf.string)
    }

    parsed_example = tf.parse_single_example(example_proto, features)

    #print(tf.sparse_tensor_to_dense(parsed_example['image/object/mask'], default_value=0))

    # Decode image
    image = tf.image.decode_jpeg(parsed_example['image/encoded'])
    parsed_example['image/encoded'] = image

    # Depth + RGBD
    depth = utilities.decode_depth(parsed_example['image/depth'])
    parsed_example['image/depth'] = depth
    rgbd = tf.concat([tf.image.convert_image_dtype(image, tf.float32), depth], axis=2)
    rgbd = tf.reshape(rgbd, shape=tf.stack([height, width, 4]))
    parsed_example['image/rgbd'] = rgbd

    mask = tf.sparse.to_dense(parsed_example['image/object/mask'], default_value="")
    mask = tf.map_fn(utilities.decode_png_mask, mask, dtype=tf.uint8)
    mask = tf.reshape(mask, shape=tf.stack([-1, height, width]), name='mask')
    print(mask)
    sys.exit()

Однако, print(mask) просто возвращает Tensor("mask:0", shape=(?, 1000, 1200), dtype=uint8), в то время как я хотел бы увидеть фактические значения. Это должно быть возможно, как показано в Руководстве по выполнению TensorFlow . Я тоже пробовал tf.print(mask, output_stream=sys.stdout), но печатается только пустая строка. mask.dtype - это uint8, поэтому я думаю, что оно должно содержать целые числа, учитывая, что оно имеет a форму. Я также нахожу странным то, что mask.device - пустая строка. Он должен храниться на каком-то устройстве, верно?

Как мне распечатать содержимое тензора mask?

1 Ответ

1 голос
/ 15 мая 2019

Если включено активное выполнение, то вы сможете позвонить

mask.numpy() 

чтобы вернуть массив значений в этом тензоре.

У меня сложилось впечатление, что print также должен печатать содержимое, когда включено активное выполнение, но это может зависеть от размера тензора.

В любом случае, стоило бы просто проверить, что вы включили нетерпеливое выполнение, вызвав:

tf.enable_eager_execution()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...