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

时间:2016-08-10 15:27:19

标签: neural-network deep-learning conv-neural-network keras

Fully Convolutional Neural Nets的强度是它们自然接受任何大小的输入,并且能够产生任何大小的输出。这对像素预测和分割任务非常有用。

但培训批次会发生什么?要构建一个小批量,您必须提前知道输入的大小。您打算如何构建各种大小的输入?

目前,我只能弄清楚如何拥有batch size = 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

0 个答案:

没有答案