Neural network 批量不同大小的输入(带完全卷积网络)

Neural network 批量不同大小的输入(带完全卷积网络),neural-network,deep-learning,conv-neural-network,keras,Neural Network,Deep Learning,Conv Neural Network,Keras,一个优势是,他们自然接受任何规模的投入,并能够产生任何规模的产出。这对于像素级预测和分割任务非常有用 但是训练批次会发生什么呢?要构建小型批处理,您必须事先知道输入的大小。您应该如何构造各种大小输入的小批量 目前,我只能解决如何使批处理大小=1。在我的实验中,它跳得太多以至于无法收敛 我曾考虑过使用某种零填充使所有输入的大小都达到训练集中最大的值,但随后我需要创建一个人工的“填充”目标类别,因为每个像素都需要映射到某个对象。不太理想。此外,它使我的模型评估产生偏差,因为网络非常擅长对“填充”空间

一个优势是,他们自然接受任何规模的投入,并能够产生任何规模的产出。这对于像素级预测和分割任务非常有用

但是训练批次会发生什么呢?要构建小型批处理,您必须事先知道输入的大小。您应该如何构造各种大小输入的小批量

目前,我只能解决如何使批处理大小=1。在我的实验中,它跳得太多以至于无法收敛

我曾考虑过使用某种零填充使所有输入的大小都达到训练集中最大的值,但随后我需要创建一个人工的“填充”目标类别,因为每个像素都需要映射到某个对象。不太理想。此外,它使我的模型评估产生偏差,因为网络非常擅长对“填充”空间(这不是有意义的数据)进行分类

我能想到的最好办法是将训练图像分成大小相似的批次,这样它们就不会有“太多”的填充。也许吧

有什么可以通过掩蔽来完成这项任务吗?我知道卷积网络不支持
keras.layers.core.Masking

这是我的Keras模型:

def build_net():
    # apply a convolution 1d of length 7 to a sequence with NUM_FEATURES channels
    # with 32 output feature maps
    model = Sequential()
    model.add(Convolution1D(32, 7, border_mode='same', input_shape=(None, NUM_FEATURES)))

    # apply a 1x1x3 convolution to collapse down to NUM_CATEGORIES feature maps
    model.add(Convolution1D(NUM_CATEGORIES, 1, border_mode='same'))

    # pass through softmax classifier
    model.add(Activation('softmax'))

    model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08), metrics=['accuracy'])

    return model

批量大小1不是在线学习,它只是SGD。