第四次作业:猫狗大战挑战赛

 

1.数据处理

CNN处理图像时,需要进行预处理;

图片将被整理成 $224\times 224 \times 3$ 的大小,同时还将进行归一化处理;

图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的。

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分钟

 

测试结果:

 

 

posted @ 2021-10-23 23:10  xi---  阅读(56)  评论(0)    收藏  举报