IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用VGG模型进行猫狗大战 -> 正文阅读

[人工智能]使用VGG模型进行猫狗大战

使用VGG模型进行猫狗大战(基于Colab)

导入要使用的相关包,判断是否存在GPU设备:
请添加图片描述
下载相关猫和狗的数据,训练集包含1800张图(猫的图片900张,狗的图片900张),测试集包含2000张图:
请添加图片描述
使用 torchvision 对数据进行复杂的预处理和变换,整理图片成 224×224×3 的大小,并进行归一化处理。使用数据处理的包datasets,它可以以多线程(multi-thread)的形式从硬盘中读取数据,使用 mini-batch 的形式,在网络训练中向 GPU 输送。请添加图片描述
查看 dsets 的一些属性,0代表猫,1代表狗,训练集和测试集的图片数量也可得到:
请添加图片描述
使用torch.utils.data.DataLoader 对数据进行 batch 的划分。数据加载器结合了数据集和取样器,并且可以提供多个线程处理数据集。在训练模型时使用到此函数,用来把训练数据分成多个小组 ,此函数每次抛出一组数据 。直至把所有的数据都抛出。就是做一个数据的初始化。请添加图片描述
请添加图片描述
显示图片的小程序:
请添加图片描述
显示 labels_try 的5张图片,即valid里第一个batch的5张图片:
请添加图片描述
创建VGG Model
torchvision 中集成了很多在 ImageNet 上预训练好的通用的CNN模型,可以直接使用预训练好的VGG模型,再下载ImageNet 1000 个类的 JSON 文件,目的是展示 VGG 模型对本数据的预测结果:请添加图片描述
对输入的5个图片利用VGG模型进行预测,同时,使用softmax对结果进行处理,发现识别结果是比较准确的。
请添加图片描述
修改最后一层,冻结前面层的参数,把最后的 nn.Linear 层由1000类,替换为2类。为了在训练中冻结前面层的参数,需要设置 required_grad=False。这样,反向传播训练梯度时,前面层的权重就不会自动更新了。训练中,只会更新最后一层的参数。

请添加图片描述
请添加图片描述
训练并测试全连接层
创建损失函数和优化器、训练模型、测试模型。
请添加图片描述
请添加图片描述
测试模型:
请添加图片描述
查看可视化模型预测结果:
方式可分为以下几种:随机查看一些预测正确的图片;随机查看一些预测错误的图片;预测正确,同时具有较大的probability的图片;预测错误,同时具有较大的probability的图片;最不确定的图片,比如说预测概率接近0.5的图片等,下面随机输出一些预测正确的几例:
请添加图片描述
在AI研习社网站下载数据进行猫狗大战:
导入相关包,下载并解压猫狗文件:
请添加图片描述
注意这里下载的文件是rar文件,不同于上面实验的zip文件,使用unrar命令进行解压。
下载成后我们发现图片文件是杂乱的,我们需要将训练集和测试集进行猫狗分类:
请添加图片描述
分类后的文件目录如下:
请添加图片描述
请添加图片描述
进行数据预处理:
请添加图片描述

并创建VGG模型
请添加图片描述
请添加图片描述
请添加图片描述

之后进行训练并测试全连接层等步骤同上:
请添加图片描述
我们发现准确率达到了94.79%。请添加图片描述
test部分类似,为便于后续ImageFolder读取,可以生成一个raw文件夹存放原图片集;文件下再生成一个新的文件夹:

import os
import random
import shutil

# source_file:源路径, target_ir:目标路径
def cover_files(source_dir, target_ir):
    for file in os.listdir(source_dir):
        source_file = os.path.join(source_dir, file)

        if os.path.isfile(source_file):
            shutil.copy(source_file, target_ir)


def ensure_dir_exists(dir_name):
    """Makes sure the folder exists on disk.
  Args:
    dir_name: Path string to the folder we want to create.
  """
    if not os.path.exists(dir_name):
        os.makedirs(dir_name)


def moveFile(file_dir, save_dir):
    ensure_dir_exists(save_dir)
    path_dir = os.listdir(file_dir)  # 取图片的原始路径
    filenumber = len(path_dir)
    rate = 1  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1,   1--表示all
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(path_dir, picknumber)  # 随机选取picknumber数量的样本图片
    # print (sample)
    for name in sample:
        shutil.move(file_dir+'/'+name, save_dir+'/'+name)


if __name__ == '__main__':
    file_dir = '/content/drive/MyDrive/cat_dog/test'  # 源图片文件夹路径
    save_dir = '/content/drive/MyDrive/cat_dog/raw'  # 移动到新的文件夹路径
    moveFile(file_dir,save_dir)


最后进行结果预测并输出CSV文件:

#将结果写入文件
def result_model(model,dataloader,size):
    model.eval()
    predictions=np.zeros((size,2),dtype='int')
    i = 0
    for inputs,classes in dataloader:
        inputs = inputs.to(device)
        outputs = model(inputs)         
        #_表示的就是具体的value,preds表示下标,1表示在行上操作取最大值,返回类别
        _,preds = torch.max(outputs.data,1)
        predictions[i:i+len(classes),1] = preds.to('cpu').numpy();
        predictions[i:i+len(classes),0] = np.linspace(i,i+len(classes)-1,len(classes))
        #可在过程中看到部分结果
        print(predictions[i:i+len(classes),:])
        i += len(classes)
        print('creating: No. ', i, ' process ... total: ', size)        
    return predictions

result = result_model(model_vgg_new,loader_valid,size=dset_sizes['test'])

np.savetxt("./cat_dog/result.csv",result,fmt="%d",delimiter=",")


将CSV文件导入AI研习社进行提交查看结果:
请添加图片描述

实验感想:
本次实验我练习了VGG模型构建及训练方法,通过猫狗大战实践了VGG模型的构建、训练、测试等;第一部分的练习可以说是初次尝试,根据教程思考代码的意义,为后续的AI研习社的练习打下了基础,这部分没有遇到什么问题。在进入研习社的练习后,主要遇到了两个问题,第一个是猫狗文件中的图片是未经过分类的图片,需要先将未分组的图片分到两个文件夹中,另一个问题就是最后导出csv文件时,在test文件下需要先在目录下新建一个文件夹,将图片导入,才能将测试集输出csv文件。可以说本次实验的完成经历了很多波折,最终能够得到结果是令人欣慰的,在以后的学习中我还应继续学习相关知识,当遇到问题时可以更快地解决问题,提高自己的深度学习能力!

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:15:35  更:2022-10-22 21:18:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:52:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码