对于这次实验,我们需要一个与经由与我们训练数据足够相似的数据集所训练的网络,只有这样已训练网络的权重值才对我们有用。幸运的是,我们下面所使用的网络是在海量数据集(自然图片集 ImageNet)上训练得到的,这样的已训练网络能满足大部分分类任务的需要。 这种技术已经被用来做一些很有意思的任务如医学图像的眼疾筛查,从海里收集到的显微图像中识别浮游生物物种,给 Flickr 上的图片进行艺术风格分类。 完美的完成这些任务,就像所有的机器学习一样,你需要很好的理解数据以及神经网络结构——你必须对数据的过拟合格外小心,你或许需要调整一些层的设置,也很有可能需要插入一些新的网络层,等等类似的调整。但是,我们的经验表明大部分时候还是可以完成任务的「Just work」,而且用我们这么原始的方法去简单尝试一下看看结果如何是很值得的。 上传预训练网络 在我们的第一次尝试中,我们使用了 AlexNet 的架构,但是网络各层的权重是随机分布的。我们需要做的就是需要下载使用一个已经经过大量数据集训练的 AlexNet。 AlexNet 的快照(Snapshots)如下,可供下载:https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet。我们需要一个二进制文件 .caffemodel,含有训练好的权重,可供下载 。在你下载这些与训练模型的时候,让我们来趁机多学点东西。2014 年的 ImageNet 大赛中,谷歌利用其开源的 GoogLeNet (https://research.google.com/pubs/pub43022.html)(一个 22 层的神经网络)赢得了比赛。GoogLeNet 的快照如下,可供下载: https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet。在具备了所有的预训练权重之后,我们还需要.caffemodel 文件,可供下载:. 有了 .caffemodel 文件之后,我们既可以将它们上传到 DIGITS 当中。在 DIGITS 的主页当中找到预训练模型(Pretrained Models)的标签,选择上传预训练模型(Upload Pretrained Model):
对于这些预训练的模型,我们可以使用 DIGITS 的默认值(例如,大小为 256×256 像素的彩色图片)。我们只需要提供 Weights (.caffemodel) 和 Model Definition (original.prototxt)。点击这些按钮来选择文件。 模型的定义,GoogLeNet 我们可以使用 https://github.com/BVLC/caffe/blob/master/models/bvlc_googlenet/train_val.prototxt,AlexNet 可以使用 https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/train_val.prototxt。我们不打算使用这些网络的分类标签,所以我们可以直接添加一个 labels.txt 文件:
在 AlexNet 和 GoogLeNet 都重复这一过程,因为我们在之后的步骤当中两者我们都会用到。 问题:有其他的神经网络能作为微调的基础吗? 回答:Caffe Model Zoo 有许多其他预训练神经网络可供使用,详情请查看 https://github.com/BVLC/caffe/wiki/Model-Zoo 使用预训练 Caffe 模型进行人工神经网络训练就类似于从头开始实现,虽然我们只需要做一些调整。首先我们需要将学习速率由 0.01 调整到 0.001,因为我们下降步长不需要这么大(我们会进行微调)。我们还将使用预训练网络(Pretrained Network)并根据实际修改它。
在预训练模型的定义(如原文本)中,我们需要对最终完全连接层(输出结果分类的地方)的所有 references 重命名。我们这样做是因为我们希望模型能从现在的数据集重新学习新的分类,而不是使用以前最原始的训练数据(我们想将当前最后一层丢弃)。我们必须将最后的全连接层由「fc8」重命名为一些其他的(如 fc9)。最后我们还需要将分类类别从 1000 调整为 2,这里需要调整 num_output 为 2。 下面是我们需要做的一些调整代码: (责任编辑:本港台直播) |