Как превратить массивы странной формы в тензор - PullRequest
2 голосов
/ 02 июня 2019

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

Я пытаюсь использовать эту сеть для задачи обучения с подкреплением, и на каждом временном шаге ей нужен один тензор. У меня есть шесть массивов numpy, вот их формы: (26,) (7,) (2,) (7,) (2,) (9,7). Я собрал их все в один массив формы (6,), но когда я пытаюсь создать с ними tf.constant, у меня возникают проблемы.


#here are the numpy arrays

in1_ = np.zeros((26,), dtype='int')
in2_ = np.zeros((7,), dtype='int')
in3_ = np.zeros((2,), dtype='int')
in4_ = np.zeros((7,), dtype='int')
in5_ = np.zeros((2,), dtype='int')
in6_ = np.zeros((9,7), dtype='int')

#in practice the arrays would contain data, not just zeros

final_array = np.array([in1_, in2_, in3_, in4_, in5_, in6_])
final_array.shape
>>>(6,)
#so I can create the big array, but I get an error when creating 
#a tf.constant

const = tf.constant(final_array)
>>>TypeError: Expected binary or unicode string, got array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

Я знаю, что и тензоры, и числовые массивы должны быть прямоугольными, поэтому я подумал, что преобразование массива в тензор будет простым. Я действительно могу заставить его работать, если я использую строки вместо массивов, но для моих целей было бы лучше этого не делать.

1 Ответ

0 голосов
/ 02 июня 2019

Вместо массива, содержащего целые числа, вы создали массив, содержащий другие массивы (обратите внимание, что final_array.dtype не dtype('int64')). Это возможно для пустых массивов, но не возможно для массивов тензорного потока (массив тензорного потока не может содержать другие массивы тензорного потока). Вот почему вы получаете сообщение об ошибке при попытке конвертировать его.

Обойти это невозможно, тензор потока не позволит иметь не соответствующие размерные размеры. Но поскольку вы хотите использовать эти массивы в качестве входных данных для вашей сети, вы можете сначала объединить их в один массив, а затем преобразовать их:

final_array = np.concatenate((in1_, in2_, in3_, in4_, in5_, in6_.reshape(-1)))
const = tf.constant(final_array)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...