zoukankan      html  css  js  c++  java
  • 第四次作业:猫狗大战挑战赛

    一、在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:由于时间稍微有点紧张,我们会继续优化算法并更新博客)
  • 相关阅读:
    获取窗口句柄
    LeetCode Q136 Single Number(Medium)
    异或
    Ring3层的鼠标和键盘Hook
    Java—Applet
    Java—常用数据类型
    Java—接口与抽象类
    Java 概述
    Java—类的封装、继承与多态
    Windows—JDK安装与环境变量配置
  • 原文地址:https://www.cnblogs.com/amoniaa/p/13907943.html
Copyright © 2011-2022 走看看