Python 如何为颜色通道重塑numpy图像阵列

Python 如何为颜色通道重塑numpy图像阵列,python,numpy,tensorflow,keras,neural-network,Python,Numpy,Tensorflow,Keras,Neural Network,我正在与Keras图书馆合作一个验证码识别项目。对于训练集,我使用以下函数生成最多5位数的验证码 def genData(n=1000, max_digs=5, width=60): capgen = ImageCaptcha() data = [] target = [] for i in range(n): x = np.random.randint(0, 10 ** max_digs) img = misc.imread(ca

我正在与Keras图书馆合作一个验证码识别项目。对于训练集,我使用以下函数生成最多5位数的验证码

def genData(n=1000, max_digs=5, width=60):
    capgen = ImageCaptcha()
    data = []
    target = []
    for i in range(n):
        x = np.random.randint(0, 10 ** max_digs)
        img = misc.imread(capgen.generate(str(x)))
        img = np.mean(img, axis=2)[:, :width]
        data.append(img.flatten())
        target.append(x)
    return np.array(data), np.array(target)
然后,我试着像下面这样重塑训练数据数组

train_data = train_data.reshape(train_data.shape[0], 60, 60, 3)
我猜我的验证码有3个颜色通道。然而,当我试图重塑训练数据时,我面临以下错误:

ValueError:无法将大小为3600000的数组重塑为形状 (1000,60,60,3)


注意:如果我尝试使用1而不是3。错误没有发生,但我的精度甚至不接近%1

您正在通过取平均值创建单通道图像。该错误表示您正在尝试重新调整一个数组的形状,该数组中的3600000个元素是三倍大(1000*60*60*3=10800000)。根据下面的示例调整您的函数以使其正常工作

此外,由于将图像的宽度减小到60像素,因此目标不再正确。这就是精度低的原因。尝试使用更大的宽度,您的精度很可能会提高(例如150-155)


非常感谢你的建议。我没有意识到采取平均值会将深度减少到1。我将继续使用相同的结构,但我还有一个问题。我正在创建不同长度的CAPTCHA,所以每个图像的大小是不同的。我需要为每种长度分别训练我的模型吗@威尔马诺:那要花很多时间和精力。最好调整captha的大小,使其大小相同。但是,您所做的是减小宽度。最好增加太小的CAPTCHA的宽度,添加零或任何值。这样你就不会泄露信息了
def genData(n=1000, max_digs=5, width=60):
    capgen = ImageCaptcha()
    data = []
    target = []
    for i in range(n):
        x = np.random.randint(0, 10 ** max_digs)
        img = misc.imread(capgen.generate(str(x)))
        img = img[:,:width,:]
        data.append(img.flatten())
        target.append(x)
    return np.array(data), np.array(target)