【问题标题】:Creating batches within an array containing images在包含图像的数组中创建批次
【发布时间】:2019-01-09 23:43:58
【问题描述】:

我有一个数组X_train,其中包含 9957 张图片。我正在制作一个卷积网络。用于输入模型的阵列的所需形状是(batchsize、channel、height、width)

X_train.shape #gives (9957, 60, 80, 3)
X_train[1].shape #gives (60, 80, 3)

如果我们使用

np.reshape(X_train,(-1, 3, 60, 80)) #it gives (9957, 3, 60, 80)

如何获得每个形状为 (batchsize, 3, 60, 80) 的数组和最终的图像数组以进行形状为 (9957, batchsize, 3, 60, 80) 的训练?

【问题讨论】:

    标签: python numpy image-processing chainer


    【解决方案1】:

    您可以从i-th 图像直到i + batchsize 图像如下。

    batchsize = 16
    i = 0
    
    X_batch = X_train[i: i+batchsize]
    print('X_batch.shape: ', X_batch.shape)  # it should be (16, 3, 60, 80)
    

    请使用 for 循环更改 i 以获取每个图像。例如,

    for i in range(0, len(X_train), batchsize):
        X_batch = X_train[i: i+batchsize]
    
        # --- Do something with X_batch ---  
    

    【讨论】:

    • 由于某种原因,它会将数组形状更改为 (5, 3, 60, 80)。
    • 9957 == 16 * 622 + 5, 5 是余数。但是你应该先参考Chainer的官方教程,推荐你使用chainer.datasets
    • model = Sequential( L.Convolution2D(None, 128, 3, 2), F.relu, L.Convolution2D(128, 64, 3, 2), F.relu, L.Convolution2D( 64, 32, 3, 2), F.relu, L.Linear(None, 16), F.dropout, L.Linear(16, 4) ) 这是模型...我的训练集的形状是 (9957 , 3, 60, 80)。它有正确的 input_shape 吗?
    • 您使用L.Convolution2D(None, 128, 3, 2) 作为第一层,第一个参数None 表示自动确定第一层的输入通道大小(在您的情况下,输入数据的通道大小为3)。所以使用这个模型是可以的。在图像的高度和宽度方面,它的大小在卷积操作期间会发生变化,但同样,当您输入L.Linear(None, 16)时,它的大小会自动确定。
    • 我的最终图像形状是 (32,3,60,80),标签形状是 (32,)。图像和标签 input_shape 是否都适合训练?
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2012-03-12
    • 2021-08-31
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多