如何使用Keras的Conv2D层处理可变形状的输入

我有一个名为X_train的NP数组,具有以下属性:

X_train.shape = (139,)X_train[0].shape = (210, 224, 3)X_train[1].shape = (220,180, 3)

换句话说,有139个观测值。每张图像的宽度和高度不同,但它们都有3个通道。因此,维度应该是(139, None, None, 3),其中None表示可变的维度。

由于在层中不包括观测数量的维度,我在Conv2D层中使用了input_shape=(None,None,3)。但这会导致以下错误:

expected conv2d_1_input to have 4 dimensions, but got array with shape (139, 1)

我的猜测是问题出在输入形状是(139,)而不是(139, None, None, 3)。然而,我不确定如何转换成后者。


回答:

解决您问题的一种可能方法是用零填充数组,使它们都具有相似的尺寸。之后,您的输入形状将类似于(139, max_x_dimension, max_y_dimension, 3)

以下函数可以完成这项工作:

import numpy as npdef fillwithzeros(inputarray, outputshape):    """    Fills input array with dtype 'object' so that all arrays have the same shape as 'outputshape'    inputarray: input numpy array    outputshape: max dimensions in inputarray (obtained with the function 'findmaxshape')    output: inputarray filled with zeros    """    length = len(inputarray)    output = np.zeros((length,)+outputshape, dtype=np.uint8)    for i in range(length):        output[i][:inputarray[i].shape[0],:inputarray[i].shape[1],:] = inputarray[i]    return outputdef findmaxshape(inputarray):    """    Finds maximum x and y in an inputarray with dtype 'object' and 3 dimensions    inputarray: input numpy array    output: detected maximum shape    """    max_x, max_y, max_z = 0, 0, 0    for array in inputarray:        x, y, z = array.shape        if x > max_x:            max_x = x        if y > max_y:            max_y = y        if z > max_z:            max_z = z    return(max_x, max_y, max_z)#Create random data similar to your datarandom_data1 = np.random.randint(0,255, 210*224*3).reshape((210, 224, 3))random_data2 = np.random.randint(0,255, 220*180*3).reshape((220, 180, 3))X_train = np.array([random_data1, random_data2])#Convert X_train so that all images have the same shapenew_shape = findmaxshape(X_train)new_X_train = fillwithzeros(X_train, new_shape)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注