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