是什么阻止了这个简单的CNN对图像是否包含猫进行分类?



我在一个全新的网络上尝试"猫与其他一切",而不是"猫与狗"(无迁移学习),我使用了大量随机的互联网图像,将其分类为"猫"或"无猫"类别。

不幸的是,我的网络似乎不会为这项任务进行随机训练。

我的网络是基本的多层细胞神经网络,有一个大的致密层,然后在末端有一个S形神经元输出0或1,表示"是猫"或"不是猫"。我的"猫"图像包括许多不同种类的猫在不同环境和背景下以不同姿势和角度裁剪的图像。我尝试过各种形式的数据增强、图像加权和数据/验证洗牌,但仍然无法从中获得有用的网络

我错过了什么?我的体系结构或方法有问题吗?我是一个机器学习新手,在Tensorflow上使用Keras。

我的网络架构如下:

Input 320x320 RGB image into network, then:
1a) Conv layer, 32 filters, 3x3
1b) Relu and max pooling 2x2.
2a) Conv layer, 32 filters, 3x3
2b) Relu and max pooling 2x2
3a) Conv layer, 64 filters, 3x3
3b) Relu and max pooling 2x2
4) Flatten
5a) Dense 64 neurons
5b) Relu
5c) Dropout 0.5
5d) Final dense 1 neuron, sigmoid activation. (0 = cat in image, 1 = no cat in image)

我使用的是二进制交叉熵和图像旋转/移位/翻转等。用于数据扩充。我的数据集高度不平衡,每5张非猫图片中就有一张猫图片。我保留了25%的数据集用于验证,同样存在1:5的不平衡。因此,我对拟合生成器进行了加权,使猫图像的权重提高了5倍。

架构、初始化等是否存在问题,或者我只是严重低估了在现代硬件上从头开始训练CNN所需的时间?

"猫对狗"的例子经常使用VGG16,就像在fast.ai课程中一样。

VGG团队在ILSVRC-2014 ImageNet竞赛中使用了其16层网络。请参阅Keras中的一个实现。

你可能会下载权重,然后在将图像缩小到(3个通道x 224x224像素)后将其应用于你的问题。

最新更新