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

一、在Colab上完成迁移学习

1. 关键步骤截图

在这里插入图片描述
下载并加载数据集,数据文件夹包括train,valid,训练集含有dogs,cats文件,图片分别被放在这两个文件夹下表示对图片正确结果的标注。
在这里插入图片描述
对图像进行预处理,将图片从中心裁剪成(224 imes 224 imes 3)的大小(3代表RGB三个通道),统一图像尺寸,并且将图像按给定均值和方差做归一化处理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从网上下载预训练好的VGG16model,设置 required_grad=False冻结前面层的参数,使得在训练时只训练最后一层。同时在深度学习中,冻结其他层,只训练某一层可以避免梯度消失。
在这里插入图片描述
设置VGG最后的全连接层4096-2,对应输出的猫和狗两类,再加上softmax输出层。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 想法和解读

代码解读

#定义格式
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

修改的部分代码如下
主要是对数据的提取做了改动

def test_model(model,dataloader,size):
    model.eval()
    #初始化变量
    predictions = np.zeros(size)
    all_classes = np.zeros(size)
    all_proba = np.zeros((size,2))
    i = 0
    running_loss = 0.0
    running_corrects = 0
    meici_shuzu=[0,1,2,3,4]
    total_cishu=0
    for inputs,classes in dataloader:
        print("num:",inputs)#获得inputs格式,进行分解
        #将数据放入GPU
        inputs = inputs.to(device)
        classes = classes.to(device)
        #放入模型,获取结果
        outputs = model(inputs)
        #计算损失值
        loss = criterion(outputs,classes)         
        _,preds = torch.max(outputs.data,1)
        #以下是修改的代码
        print("
preds:",preds)#输出观察preds结构,发现是张量
        for shushu2 in range(0,5):#构造编号,后期发现其
        #实只需要调用test的图片名就好了
          meici_shuzu[shushu2]=shushu2+total_cishu
          #将preds用numpy转换成数组类型,便于储存
         dataframe=pd.DataFrame({'num':meici_shuzu,'result':preds.numpy()})
         #循环写入
         dataframe.to_csv("test.csv",index=False,mode='a',sep=",")
        total_cishu=total_cishu+5

在进行写入数据的时候,要注意图片在colab的排序方式,并按照对应的格式输出数据

二、在AI研习社提交代码评测

  1. 从AI研习社下载测试数据集至本地,共2000张图片在这里插入图片描述
  2. 上传测试集至colab
    在这里插入图片描述
  3. 使用神经网络分析并生成结果集,保存至本地
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 在AI研习社平台提交测试结果
    在这里插入图片描述
    (PS:由于时间稍微有点紧张,我们会继续优化算法并更新博客)
原文地址:https://www.cnblogs.com/amoniaa/p/13907943.html