我试图在Keras中仅使用1个频道对图像进行分类(29 x 29)。如果中间像素在某个范围内,则输出为1,否则为0。
对于训练集,我有10000个图像,输出1和30000个图像,输出0,我使用以下架构:
model = Sequential()
# kernel = (4, 4); 6 outputmaps 26x26
model.add(Convolution2D(6, 4, 4, input_shape=(img_channels, img_rows, img_columns)))
model.add(Activation('relu'))
# 6 outputmaps of 13x13
model.add(MaxPooling2D(pool_size=(2, 2)))
# 12 outputmaps of 10x10 ; kernel = (4, 4)
model.add(Convolution2D(12, 4, 4))
model.add(Activation('relu'))
# 12 outputmaps of 5x5
model.add(MaxPooling2D(pool_size=(2, 2)))
# 24 outputmaps of 4x4 ; kernel = (2, 2)
model.add(Convolution2D(24, 2, 2))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
编译时,我使用的是binary_crossentropy loss
model.compile(loss='binary_crossentropy', optimizer='sgd', class_mode='binary')
准确度波动,但在每个时期后达到0.75的最终值。 有什么我想念的吗?有什么我应该改变或添加,以使其工作?
答案 0 :(得分:0)
尝试解释您的方法,您希望您的CNN仅查看29 * 29像素中的1个。我不是专家,但这对CNN来说听起来不是一个好问题。但是,通常如果您的网络在训练数据上获得不良结果,则您的网络太小。所以你可以试着让它更大。您可以考虑的另一件事:您的设置(内核大小,层数,池)实际上实现了什么?您的设置可能不适合这种任务吗?这就是我要做的事情:
您的训练和测试究竟如何?这是一个玩具项目吗?