我正在学习使用深度学习框架Chainer,但在 ImageNet 上训练 GoogLeNet 时遇到了麻烦。
我使用给定的示例并使用以下方法调用它:
python2 train_imagenet.py
--arch googlenet
--batchsize 64
--epoch 10
--gpu 0
--mean ~/data/imagenet/ILSVRC2012_devkit_t12/data/mean_RGB_256x256.npy
--out output/
--root ~/data/imagenet/dataset_sample_256x256/
--val_batchsize 8
~/data/imagenet/lists/train_files_sample.txt
~/data/imagenet/lists/val_files_sample.txt
我使用包含 5000 张图像的 ImageNet 子集,每个图像的大小调整为 256x256,并在需要时转换为 RGB。
我的损失甚至没有丝毫变化,如下面的日志所示。当我记录预测的类时,它总是在几次迭代后最终预测总是相同的类(但是当我再次运行它时,这个类会改变)。我仔细检查了我的数据集,一切似乎都很好,我使用 ImageNet 标签 ID,我的 txt 文件包含成对的路径和标签,每行一个。
epoch iteration main/loss validation/main/loss main/accuracy validation/main/accuracy lr
1 100 11.0533 0.00015625 0.01
2 200 11.0533 0.00078125 0.01
3 300 11.0533 0.00046875 0.01
5 400 11.0533 0.0009375 0.01
6 500 11.0531 0.000625 0.01
7 600 11.0532 0.00078125 0.01
8 700 11.0533 0.0009375 0.01
由于它是来自官方仓库的代码,我猜我的子集有问题。我的预处理正确吗?5000 还不够吗(不是达到最先进的水平,而是真正学到一些东西)?
感谢您对可能出现问题的任何想法。