我有一个形状为 N×H×W×3 的数组trainAll
的四维数据。我需要把它分开,所以我做了
X_train = trainAll[:,:,:,1]
Y_train = trainAll[:,:,:,1:3]
正如预期的那样,Y_train.shape
N×H×W×2 。
但是X_train.shape
N×H×W 因为最后一个维度的大小只有1。
但是神经网络需要四维数组,所以看起来应该是
N×H×W ×1
令人惊奇的是,如果我trainAll[:,:,:,2:3]
,那么我会得到N*H*W*1
,但我希望第一个维度分开,而不是最后一个维度。
老实说,我无法谷歌,因为我不知道该问什么。所以任何人都可以帮助我,这样我不仅可以分开第一维而且shape
是 N×H×W ×1 而不是 N×H×W ?
答案 0 :(得分:1)
我能够弄清楚,但仍然不知道我的答案是否正确。我想知道python如何做到这一点以及当形状转移到N*H*W
而不是N*H*W*1
时发生了什么
解决方案: trainAll[:,:,:,0:1]
因此,而不是trainAll[:,:,:,1]
选择它只是将其切片
答案 1 :(得分:1)
尝试添加新轴作为所需尺寸。 (这里,作为第四个维度)。
X_train = trainAll[:, :, :, 0]
X_train = X_train[:, :, :, np.newaxis]
# now, X_train.shape will be N * H * W * 1
当您对切片进行切片时,首先将它们放在首位的原因是因为在使用单个索引时将结果切换为(n,)
,并通过添加(n, 1)
进行切换新轴。
答案 2 :(得分:0)
我找到了以下内容并且效果更好:tf.expand_dims
tensorflow docs,为了减少维度,请使用:tf.squeeze()
此处tf指的是tensorflow