为什么我基于 Alexnet 的 CNN 无法分类?
Why my CNN based on Alexnet fails in classification?
我正在尝试构建一个 CNN 来分类 dogs.In 事实上,我的数据集包含 5 类 只狗。我将 50 张狗的图像分成 40 张用于训练的图像和 10 张用于测试的图像。
我已经基于 AlexNet 预训练模型训练我的网络超过 100,000 和 140,000 次迭代,但准确度始终在 20% 到 30% 之间。
事实上,我已将 AlexNet 改编为我的问题如下:我将最后一个全连接网络的名称和 num_output 更改为 5。此外,我还更改了第一个全连接层 (fc6) 的名称。
那么,即使我使用了数据增强(裁剪),为什么这个模型还是失败了?
我是否应该在我的网络的顶层使用线性分类,因为我有一点数据并且类似于 AlexNet 数据集(如此处所述transfer learning)或者我的数据集与原始数据非常不同一组 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
虽然你没有给我们太多的调试信息,但我怀疑你做了一些严重的过拟合。通常,用于训练的模型 "sweet spot" 取决于时期,而不是迭代。单节点 AlexNet 和 GoogleNet,在 ILSVRC 风格的数据库上,训练 50-90 个时期。即使您的批量大小小至 1,您也仅用 5 classes 训练了 2500 个时期。每个 class 只有 8 张图像,AlexNet 拓扑 严重 矫枉过正,可能适用于每张照片。
考虑一下:您只有 40 张训练照片,但第一个卷积层有 96 个内核,第二个卷积层有 256 个。这意味着您的模型可以在 conv1 中花费超过 2 个内核,在 conv 2 中花费超过 6 个内核用于 each 照片!你没有特征的共性,没有平均......而不是将边缘检测概括为寻找面孔,你将拥有针对单张照片调整的专用过滤器。
简而言之,您的模型经过训练可以找到 "Aunt Polly's dog on a green throw rug in front of the kitchen cabinet with a patch of sun to the left." 它不必学习区分 basenji 和 basset,只需识别每张照片中随机方便的内容即可。
我正在尝试构建一个 CNN 来分类 dogs.In 事实上,我的数据集包含 5 类 只狗。我将 50 张狗的图像分成 40 张用于训练的图像和 10 张用于测试的图像。 我已经基于 AlexNet 预训练模型训练我的网络超过 100,000 和 140,000 次迭代,但准确度始终在 20% 到 30% 之间。 事实上,我已将 AlexNet 改编为我的问题如下:我将最后一个全连接网络的名称和 num_output 更改为 5。此外,我还更改了第一个全连接层 (fc6) 的名称。
那么,即使我使用了数据增强(裁剪),为什么这个模型还是失败了?
我是否应该在我的网络的顶层使用线性分类,因为我有一点数据并且类似于 AlexNet 数据集(如此处所述transfer learning)或者我的数据集与原始数据非常不同一组 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
虽然你没有给我们太多的调试信息,但我怀疑你做了一些严重的过拟合。通常,用于训练的模型 "sweet spot" 取决于时期,而不是迭代。单节点 AlexNet 和 GoogleNet,在 ILSVRC 风格的数据库上,训练 50-90 个时期。即使您的批量大小小至 1,您也仅用 5 classes 训练了 2500 个时期。每个 class 只有 8 张图像,AlexNet 拓扑 严重 矫枉过正,可能适用于每张照片。
考虑一下:您只有 40 张训练照片,但第一个卷积层有 96 个内核,第二个卷积层有 256 个。这意味着您的模型可以在 conv1 中花费超过 2 个内核,在 conv 2 中花费超过 6 个内核用于 each 照片!你没有特征的共性,没有平均......而不是将边缘检测概括为寻找面孔,你将拥有针对单张照片调整的专用过滤器。
简而言之,您的模型经过训练可以找到 "Aunt Polly's dog on a green throw rug in front of the kitchen cabinet with a patch of sun to the left." 它不必学习区分 basenji 和 basset,只需识别每张照片中随机方便的内容即可。