在TensorFlow中,我有一个形状为(?, 14, 14, 512)
的张量,h
。
我通过做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))
这两种重塑方法的结果是否相同,或者有什么不同?
发布于 2018-01-09 18:21:23
这两种方法都是有效的,并且会给出相同的结果:
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就能够自动计算出它的值。
发布于 2018-01-09 18:27:13
可以写成
a = np.ndarray([3000,14,14,2048])
b = a.reshape((-1, 196, 2048))
形状维度可以是-1,该值是从数组的长度和剩余维度推断出来的。
在您的示例中,维度的第一个值必须是3000,才能满足其余维度。
这两种重塑方法的结果是相同的,还是有什么不同?
这两个结果应该是相同的
https://stackoverflow.com/questions/48174172
复制相似问题