TensorFlow: список индексов вне диапазона с conv2d_transpose - PullRequest
0 голосов
/ 26 июня 2018

Я хотел бы использовать сверточную транспозицию для получения тензора 2700 значений со следующим вводом:

input = tf.placeholder(tf.float32, shape=(batch_size, 1 , 1 ,1))

Для этого я использовал функцию tf.nn.conv2d_transpose .

Вот мой код:

import tensorflow as tf

import numpy as np

sess = tf.Session()

batch_size = 20

input = tf.placeholder(tf.float32, shape=(batch_size, 1 , 1 ,1))

logits = tf.nn.conv2d_transpose(input, [batch_size,1,2700,1],[batch_size, 1, 2700, 1],[1,1,3,1],'SAME')

Когда я запускаю эту программу, в последней строке появляется следующая ошибка:

IndexError: list index out of range

Вот полная ошибка, возвращаемая Python:

IndexError                                Traceback (most recent call last)
<ipython-input-34-724f7880c01d> in <module>()
      9 input = tf.placeholder(tf.float32, shape=(batch_size, 1 , 1 ,1))
     10 
---> 11 logits = tf.nn.conv2d_transpose(input, [batch_size,1,2700,1],[batch_size, 1, 2700, 1],[1,1,3,1],'SAME')

/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/nn_ops.py in conv2d_transpose(value, filter, output_shape, strides, padding, data_format, name)
   1223     filter = ops.convert_to_tensor(filter, name="filter")  # pylint: disable=redefined-builtin
   1224     axis = 3 if data_format == "NHWC" else 1
-> 1225     if not value.get_shape()[axis].is_compatible_with(filter.get_shape()[3]):
   1226       raise ValueError("input channels does not match filter's input channels, "
   1227                        "{} != {}".format(value.get_shape()[axis],

/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/tensor_shape.py in __getitem__(self, key)
    610         return TensorShape(self._dims[key])
    611       else:
--> 612         return self._dims[key]
    613     else:
    614       if isinstance(key, slice):

IndexError: list index out of range

Некоторая помощь будет приветствоваться

1 Ответ

0 голосов
/ 26 июня 2018

Из документации tf.nn.conv2d_transpose вы можете видеть, что вам нужно определить заполнители для filter и output_shape аналогично тому, как вы это сделали для input,

Следующий тестовый код запустился для меня без возврата ошибки.Сделайте необходимые изменения для нужного размера вывода:

import tensorflow as tf

import numpy as np

sess = tf.Session()

batch_size = 20

input = tf.placeholder(tf.float32, shape=(batch_size, 1 , 1 ,1))

filter = tf.placeholder(tf.float32, shape=(batch_size, 1 , 2700 ,1))

out = tf.placeholder(tf.int32, shape=(4,))

logits = tf.nn.conv2d_transpose(input, filter,out,[1,1,3,1],'SAME')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...