我有一个2890张tiff lzw压缩图像的文件夹作为标签,供深度学习使用(我有2类,分别是1和2)。我想将它们准备为需要2D数组的模型的输入。因此,我使用imread()
库中的skimage.io
将它们读取为2890个numpy数组(Y)的列表,然后将该列表转换为nd.array(Y_train)。现在我有3个维度(2890、224、224)的Y_train,其中224、224是输入图像大小。
现在,我需要将此3D数组转换为2D数组,如(2890,2)2显示类号。
我使用了Y_train.reshape(2890,2)
并得到了以下错误:ValueError: cannot reshape array of size 145008640 into shape (2890,2).
我还使用了to_categorical
中的keras.utils
并获得了4D arry(2890,224,224,3)。
如何将3D数组(2890、224、224)转换为2D数组(2890,2)?
答案 0 :(得分:0)
假设您要将其重塑为(2890,224 * 224),则可以通过在要替换旧尺寸的尺寸中放置-1来实现。例如
np.reshape(2890, -1)
答案 1 :(得分:0)
我认为您对重塑操作有一个非常错误的想法。整形操作可确保矩阵/向量中的元素数无论如何都相同。
因此,您只能将形状为(A, B, C, D)
的矩阵重塑为(A, E)
iff B x C x D = E
。
您有两个完全不同的数组,X的形状为(-1,224,224),Y的形状为(-1,2)。您不仅可以整形,还必须将图像读取为numpy数组,并且对于每个图像,将标签附加到另一个numpy数组,之后可以应用 to_categorical (Keras)或 LabelEncoder (scikit学习)。
遵循一些在线资源以了解阅读标签的方法:Tensorflow read images with labels