在TensorFlow中,我有一个形状为h
的Tensor (?, 14, 14, 512)
。
我通过tf.reshape(h, [-1, 196, 512])
导致形状张量(?, 196, 512)
。完善。我需要对numpy数组做同样的事情。
我有一个巨大的多维NumPy数组保存到磁盘。它看起来像这样:
features = numpy.ndarray([3000, 14, 14, 2048], dtype=np.float32)
并且需要它的形状:
[3000, 196, 2048]
我怎样才能进行这种转变,以免丢失信息?
是numpy.reshape(features, (3000, 196, 2048))
吗?
或numpy.reshape(features, (-1, 196, 2048))
?
这两种重塑方法是否会产生相同的结果或有什么区别?
答案 0 :(得分:0)
两者都有效,会给你相同的结果:
features = np.ndarray([3000, 14, 14, 2048], dtype=np.float32)
# prints (3000, 196, 2048)
print(np.reshape(features, (3000, 196, 2048)).shape)
# prints (3000, 196, 2048)
print(np.reshape(features, (-1, 196, 2048)).shape)
# another option, prints (3000, 196, 2048) as well
print(features.reshape((-1, 196, 2048)).shape)
只要您只有一个-1
维度,numpy就能自动计算其值。
答案 1 :(得分:0)
可以写成
a = np.ndarray([3000,14,14,2048])
b = a.reshape((-1, 196, 2048))
形状尺寸可以是-1,并且该值是从数组长度和剩余尺寸推断出来的。
在您的情况下,维度的第一个值必须为3000才能满足剩余的维度。
这两种重塑方法是否会产生相同的结果或有什么区别?
这两个应该给你相同的结果