Neural network Keras图像的二值分类

Neural network Keras图像的二值分类,neural-network,classification,conv-neural-network,keras,Neural Network,Classification,Conv Neural Network,Keras,我试图在Keras中仅使用一个通道对图像(29 x 29)进行分类。如果中间像素在某个范围内,则输出为1,否则为0 对于培训集,我有10000个输出为1的图像和30000个输出为0的图像,我使用以下体系结构: model=Sequential() #内核=(4,4);6个输出映射26x26 添加(卷积2D(6,4,4,输入形状=(img\u通道,img\u行,img\u列))) 添加(激活('relu')) #13x13的6个输出图 add(MaxPooling2D(池大小=(2,2))) #1

我试图在Keras中仅使用一个通道对图像(29 x 29)进行分类。如果中间像素在某个范围内,则输出为1,否则为0

对于培训集,我有10000个输出为1的图像和30000个输出为0的图像,我使用以下体系结构:

model=Sequential()
#内核=(4,4);6个输出映射26x26
添加(卷积2D(6,4,4,输入形状=(img\u通道,img\u行,img\u列)))
添加(激活('relu'))
#13x13的6个输出图
add(MaxPooling2D(池大小=(2,2)))
#12个10x10的输出图;内核=(4,4)
模型添加(卷积2D(12,4,4))
添加(激活('relu'))
#12个5x5的输出图
add(MaxPooling2D(池大小=(2,2)))
#24个4x4输出图;内核=(2,2)
模型添加(卷积2D(24,2,2))
添加(激活('relu'))
model.add(展平())
model.add(密集型(1,激活='sigmoid'))
对于编译,我使用了二进制熵损失

model.compile(loss='binary'u crossentropy',optimizer='sgd',class='u mode='binary')
精度波动,但在每个历元后达到最终值0.75。
我有什么遗漏吗?有什么我应该改变或添加,以使这项工作

试图解释你的方法时,你希望你的CNN只能看到29*29像素中的1个。我不是专家,但这听起来对CNN来说不是个好问题。但是,通常如果您的网络在训练数据上取得了不好的结果,则说明您的网络太小。所以你可以试着把它变大。您可以考虑的另一件事是:您的设置(内核大小、层、池)实际实现了什么?您的设置是否不适合此类任务?下面是我要做的:

  • 在没有CNN的情况下试试这个,即使用1或2个完全连接的层,看看会发生什么
  • 使分辨率“更精细”,即使用(3,3)过滤器大小
  • 删除maxpooling(maxpooling丢弃信息以使功能更加不变,我看不出您需要这个)
  • 添加更多conv层
  • 可能与此无关,但您的数据集非常小,因此您不需要sgd的速度优势,请选择其他优化器

您的培训和测试情况如何?这是一个玩具项目吗?

试图解释你的方法,你希望你的CNN只看29*29像素中的一个。我不是专家,但这听起来对CNN来说不是个好问题。但是,通常如果您的网络在训练数据上取得了不好的结果,则说明您的网络太小。所以你可以试着把它变大。您可以考虑的另一件事是:您的设置(内核大小、层、池)实际实现了什么?您的设置是否不适合此类任务?下面是我要做的:

  • 在没有CNN的情况下试试这个,即使用1或2个完全连接的层,看看会发生什么
  • 使分辨率“更精细”,即使用(3,3)过滤器大小
  • 删除maxpooling(maxpooling丢弃信息以使功能更加不变,我看不出您需要这个)
  • 添加更多conv层
  • 可能与此无关,但您的数据集非常小,因此您不需要sgd的速度优势,请选择其他优化器
您的培训和测试情况如何?这是一个玩具项目吗