Machine learning 为什么我基于Alexnet的CNN分类失败?

Machine learning 为什么我基于Alexnet的CNN分类失败?,machine-learning,deep-learning,caffe,Machine Learning,Deep Learning,Caffe,我正试图建立一个CNN来对狗进行分类。事实上,我的数据集由5类狗组成。我有50张狗的图片,分成40张用于训练,10张用于测试。 我已经基于AlexNet预训练模型对我的网络进行了100000到140000次迭代,但准确率始终在20%到30%之间。 事实上,我已经对AlexNet进行了如下调整:我将最后一个完全连接的网络的名称和num_输出更改为5。此外,我还更改了第一个完全连接层(fc6)的名称 那么,为什么即使我使用了数据扩充(裁剪),这个模型也失败了呢 我应该在我的网络顶层使用线性分类,因为

我正试图建立一个CNN来对狗进行分类。事实上,我的数据集由5类狗组成。我有50张狗的图片,分成40张用于训练,10张用于测试。 我已经基于AlexNet预训练模型对我的网络进行了100000到140000次迭代,但准确率始终在20%到30%之间。 事实上,我已经对AlexNet进行了如下调整:我将最后一个完全连接的网络的名称和num_输出更改为5。此外,我还更改了第一个完全连接层(fc6)的名称

那么,为什么即使我使用了数据扩充(裁剪),这个模型也失败了呢

我应该在我的网络顶层使用线性分类,因为我有一点数据,类似于AlexNet数据集(如本文所述),或者我的数据集与AlexNet的原始数据集非常不同,我应该在早期的网络中训练线性分类器

这是我的解决方案:

net: "models/mymodel/train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 200000
momentum: 0.9
weight_decay: 0.0005
snapshot: 1000
snapshot_prefix: "models/mymodel/my_model_alex_net_train"
solver_mode: GPU

虽然您没有给我们提供太多调试信息,但我怀疑您做了一些严重的过度装配。一般来说,模型的训练“最佳点”取决于时代,而不是迭代。单节点AlexNet和GoogleNet,在ILSVRC风格的数据库上,在50-90个时代进行训练。即使您的批量大小只有1个,您也已经用5个课程进行了2500个时代的培训。由于每个类只有8张图片,AlexNet拓扑结构是严重的过度使用,并且很可能适合每个单独的照片

考虑一下:您只有40张训练照片,但是第一个卷积层有96个内核,第二个卷积层有256个内核。这意味着您的模型可以在conv1中为每张照片花费超过2个内核,在conv2中花费6个内核!你没有特征的共性,没有平均值。。。与边缘检测一般化为查找人脸不同,您将使用专门的过滤器对单个照片进行调整


简言之,您的模特经过训练,能够找到“波莉阿姨的狗在厨房橱柜前的绿色地毯上,左边有一片阳光。”它不必学会区分basenji和basset,只需识别每张照片中随机方便的东西。

批量大小是多少?解算器文件的训练参数是什么?还有很多其他的考虑因素,但这些都是一个很好的开始。你能解释一下历代和迭代之间的区别,以及如何确定历代的数量吗?在这里,让我为你搜索一下。您更改了solver.prototxt文件中的迭代次数。感谢您的帮助,因此我的问题的解决方案是获得更多数据?更多数据是一种可能性;没有一个解决办法。最佳解决方案取决于您的应用程序和范例。