这节课我们会用Jeremy's的方法来做猫狗识别的竞赛。我们会研究神经网络的结构,如何初始化参数并且提高结果的准确率,然后我们会研究如何用keras来构造线性模型,最后我们将讨论激活层的作用并且学习怎样训练一个vgg模型来分类猫和狗
教学方法
在学习这节课之前,我们想先介绍这门课的学习方法:
先花30分钟自己钻研
然后你可以寻求帮助
如果你有问题,详细描述他们来加速解决问题的过程
用wiki上提供的资源
Jeremy's 的方案
计划
首先是下载数据,然后创造验证集,然后将图片移动到合适的目录文件下,然后进行训练并且提交。
jupyter的一些命令:可以用%开始来选择一些命令然后看他们的说明
可以有那个!开始一些bash命令
数据准备
创建一个有效的文件夹并从列车文件夹中移动2000个随机样本进入它。
创建一个示例文件夹。
在你的样本文件夹中,创建一个训练文件夹并从火车上复制200个随机样本。
再次,在您的示例文件夹中,创建一个有效的文件夹并从训练文件上复制50个随机样本。
为您的有效样本和训练文件夹创建一个猫文件夹和一个狗文件夹
将所有的猫样本移动到猫文件夹中,把你所有的狗样品移到狗夹里
以上的操作都可以在terminal里面用ls,mv,cp,shuf,head等等完成
Finetune and Train
vgg.model.save_weights(path+'results/ft1.h5')
我们在这里所做的就是保存我们在微调后学习的权重,并将我们的模型拟合到这个数据集。这有明显的优势,它允许我们在每次使用该模型时跳过这一步。它还允许我们跟踪我们的模型的不同版本:当我们继续训练它时,我们可能会过度拟合或者结束一个比前一次迭代不那么理想的模型。因此,在每个独特的拟合过程之后保存模型权重是有好处的。
from IPython.display import FileLink
FileLink('data/redux/subm98.csv')
Jeremy's Findings
logloss的公式如下:
In Keras, we also call this "binary entropy", and it is a particular subset of "categorical cross-entropy" (particularly in Keras).
可以尝试用更多的epochs来提升模型的准确率
如果你用了多个epochs,你可以选择分开来检测预测的结果
如果你的准确率不是那么合适,尝试降低学习率
vgg.model.optimizer.lr = 0.01
可视化结果
在可视化的时候我们需要以下几类: 一些随机的正确的样本,一些随机的错误的样本,每一类中最正确的标签,每一类中最不正确的,最不确定的标签
然后我们可以画出它的confusion matrix
cm = confusion_matrix(val_classes, preds)
plot_confusion_matrix(cm, val_batches.class_indices)
神经网络
Looking at the spreadsheet before we begin.
The values in the purple circle belong to our input vector, and the values in the yellow circle belong to our target vector y. We want to perform a series of matrix products to get as close to the target vector y as possible.
(1) Matrix multiplication between the input vector and the first weights matrix, 1st column. Resulting in the first activation vector's 1st value.
[图片上传中。。。(4)]
(2) Matrix multiplication between the input vector and the first weights matrix, 2nd column. Resulting in the first activation vector's 2nd activation value.
[图片上传中。。。(5)]
(3) Matrix multiplication between the first activations vector and the second weights matrix, 1st column. Resulting in the second activation vector's 1st value.
(4) Matrix multiplication between the first activations vector and the second weights matrix, 2nd column. Resulting in the second activation vector's 2nd value.
Observing the matrix multiplication of the first column in each weight matrix. How can we get the final activation vector to contain the same values as our target vector y?