第四次作业:猫狗大战挑战赛
1.数据处理
CNN处理图像时,需要进行预处理;
图片将被整理成 的大小,同时还将进行归一化处理;
图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的。
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) vgg_format = transforms.Compose([ transforms.CenterCrop(224), transforms.ToTensor(), normalize, ]) data_dir = './dogscats' dsets = {x: datasets.ImageFolder(os.path.join(data_dir, x), vgg_format) for x in ['train', 'valid']} dset_sizes = {x: len(dsets[x]) for x in ['train', 'valid']} dset_classes = dsets['train'].classes
2.查看 dsets_train 的一些属性
如图所示,猫是0,狗是1
# 通过下面代码可以查看 dsets 的一些属性 print(dsets['train'].classes) print(dsets['train'].class_to_idx) print(dsets['train'].imgs[:5]) print('dset_sizes: ', dset_sizes)

3.显示图片

4.创建VGG model

5.VGG网络结构
包括多层卷积,最大值池化,relu激活函数等。

6.冻结前面的参数,修改网络最后一层
增加了两个线性层,同时使用效果更好的参数为0.2的LeakyReLU函数

7.训练并测试全连接层
训练:运行15分钟

测试:运行20分钟

测试结果:


浙公网安备 33010602011771号