Есть ли у тензорного потока переменные формы? - PullRequest
0 голосов
/ 28 мая 2018

Часто я хотел бы работать с данными переменного размера, например, количеством выборок.

Чтобы передать эти данные в тензорный поток, я использую переменные python (например, "num_samples = 2000"), чтобы определитьформы.Это означает, что я должен заново создать новый график для каждого количества образцов.Установка validate_shape = False не подходит для меня.

Есть ли способ Tensorflow иметь размеры в качестве переменных?

1 Ответ

0 голосов
/ 28 мая 2018

tf.placeholder() позволяет создавать тензоры, которые будут заполняться только во время выполнения;и это позволяет определять тензоры с размерами переменного размера, используя None в их форме.

tf.shape() дает вам динамический размер тензора, самого как тензора (фактически какtf.TensorShape, который вы можете использовать, например, для динамического генерирования других тензоров).См. tf.TensorShape для более подробных объяснений.

Пример, который, как мы надеемся, прояснит ситуацию:

import tensorflow as tf
import numpy as np

# Creating a placeholder for 3-channel images with undefined batche size, height and width:
images = tf.placeholder(tf.float32, shape=(None, None, None, 3))

# Dynamically obtaining the actual shape of the images:
images_shape = tf.shape(images)

# Demonstrating how this shape can be use to dynamically create other tensors:
ones = tf.ones(images_shape, dtype=images.dtype)
images_plus1 = images + ones 

with tf.Session() as sess:
    for i in range(2):
        # Generating a random number of images with a random HxW:
        num_images = np.random.randint(1, 10)
        height, width = np.random.randint(10, 20), np.random.randint(10, 20)
        images_zero = np.zeros((num_images, height, width, 3), dtype=np.float32)

        # Running our TF operation, feeding the placeholder with the actual images:
        res = sess.run(images_plus1, feed_dict={images: images_zero})

        print("Shape: {} ; Pixel Val: {}".format(res.shape, res[0, 0, 0]))
# > Shape: (6, 14, 13, 3) ; Pixel Val: [1. 1. 1.]
# > Shape: (8, 11, 15, 3) ; Pixel Val: [1. 1. 1.]

# ^ As you can see, we run the same graph each time with a different number of 
# images / different shape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...