如何将奇形异状的阵列变成张量

时间:2019-06-01 22:42:32

标签: python numpy tensorflow

我有一堆具有不同形状和尺寸的numpy数组,我需要将它们全部转换成一个张量流张量,作为神经网络的输入。

我正在尝试将此网络用于强化学习问题,并且在每个步骤中它都需要一个张量。我有六个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])

我知道张量和numpy数组都必须是矩形的,所以我认为将数组转换为张量很简单。如果我使用字符串而不是数组,我实际上可以使其工作,但是出于我的目的,最好不要这样做。

1 个答案:

答案 0 :(得分:0)

您创建了一个包含其他数组的数组,而不是包含整数的数组(请注意,final_array.dtype不是dtype('int64'))。这对于numpy数组是可行的,但对于tensorflow数组则不可能(tensorflow数组不能包含其他tensorflow数组)。这就是为什么在尝试转换时会出现错误的原因。

这是没有办法的,tensorflow将不允许具有不匹配的尺寸大小。但是,由于要将这些数组用作网络的输入,因此可以先将它们组合成一个数组,然后再将它们转换:

final_array = np.concatenate((in1_, in2_, in3_, in4_, in5_, in6_.reshape(-1)))
const = tf.constant(final_array)