Получена ошибка измерения для входных данных (n, n, 1) и (n, n) даже после явного определения - PullRequest
0 голосов
/ 18 марта 2019

У меня есть два ввода изображения в оттенках серого (оба изображения 256 x 256), и я поставил их под filename1 и filename2.Когда я помещаю эти два изображения в заполнитель под feed, я уже упоминал, что форма имеет вид [None, 256, 256, 1].

Однако, когда я запускаю приведенный ниже код, я все еще получаю ошибку, говоря, что мой текущийввод (256,256) вместо (256,256,1).Как мне изменить мой код?

Мой код: -

feed = {
          tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): misc.imread(filename1),
          tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): misc.imread(filename2)
        }

sess.run(graph.get_tensor_by_name("output:0"), feed_dict=feed)

Ошибка, которую я получил: -

ValueError: Cannot feed value of shape (256, 256) for Tensor u'Placeholder:0', which has shape '(?, 256, 256, 1)'

Обновлено

Я также проверил это, и получил ошибку, как показано ниже: -

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess, [tag_constants.TRAINING], export_dir)

    img1 = misc.imread(filename1, flatten=True)
    img2 = misc.imread(filename2, flatten=True)

    feed = {
      tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): img1[np.newaxis, :, :, np.newaxis],
      tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): img2[np.newaxis, :, :, np.newaxis]
    }

    graph = tf.get_default_graph()

    sess.run(graph.get_tensor_by_name("output:0"), feed_dict=feed)

Ошибка, которую я получил: -

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'data' with dtype float and shape [?,256,256,1]

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

scipy.misc.imread возвращает массив (256, 256), поскольку изображения имеют оттенки серого, поэтому нет необходимости в измерении "каналы". Вы можете просто добавить это измерение самостоятельно. Вам также нужно будет добавить новые первые измерения, чтобы они соответствовали первому измерению заполнителя (None).

В дополнение к этому, вы должны убедиться, что вы читаете изображение в том формате, который вы ожидаете. Поскольку вы работаете с изображениями в градациях серого, вы можете передать flatten=True в scipy.misc.imread, чтобы убедиться, что возвращаемое изображение имеет тип float32 и не имеет цветовых каналов.

from scipy import misc

img1 = misc.imread(filename1, flatten=True)
img2 = misc.imread(filename2, flatten=True)
feed = {
          tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): img1[np.newaxis, :, :, np.newaxis],
          tf.placeholder(tf.float32, shape=[None, 256, 256, 1]): img2[np.newaxis, :, :, np.newaxis]
        }

sess.run(graph.get_tensor_by_name("output:0"), feed_dict=feed)
0 голосов
/ 18 марта 2019

(256, 256) - фигура по умолчанию для массива, выводимого функцией imread для изображения в градациях серого.Таким образом, чтобы скормить его вашему feed_dict, вам нужно

file = misc.imread(filename1)
arr = tf.expand_dims(file, -1)
...