实战:利用pytorch搭建VGG-16实现从数据获取到模型训练的猫狗分类网络

本文介绍了作者如何从零开始使用PyTorch搭建VGG-16模型进行猫狗分类。通过学习PyTorch、处理图像数据,作者实现了模型构建并分享了数据来源和参考资源。尽管训练过程中遇到一些问题,如数据增强、模型训练细节等,但整体加深了对PyTorch的理解。
摘要由CSDN通过智能技术生成

在这里插入图片描述

在学习了卷积神经网络的理论基础和阅读了VGG的论文之后,对卷积有了大致的了解,但这都只是停留在理论上,动手实践更为重要,于是便开始了0基础学习pytorch、图像处理,搭建模型。
pytorch学习视频 https://www.bilibili.com/video/BV1hE411t7RN
代码参考https://blog.csdn.net/aa330233789/article/details/106411301
数据集来源https://www.cnblogs.com/xiximayou/p/12372969.html

  • 收获最大的是对于pycharm的了解更进一步,利用help 和 ?? 在python console 中查看帮助文档,是一个很实用的技巧,并且这也是离线操作,不会就查,函数的参数、参数的含义、数学原理等等一应俱全,配上Makedown的编辑器,绝了。
  • 惊讶于pytorch的封装能力,就从一个BP函数来说,简单的几个参数,包含了 L 2 L^2 L2正则化(权重衰减)、动态学习率调整,对于一个萌新来说,大概连原理也不要明白,只需要知道参数的作用便可以搭建网络。
  • 实际上这个实战还有很多地方没有完善,比如数据增强部分,数据可视化,模型的训练(没算力啥也不是),还有很多地方值得进一步挖掘。
  • 整体搭建一个类似的项目,虽然伤眼睛、废手,收获确实很大,对于Pytorch的理解比上一个星期的视频可要来得深刻,当然如果想要深入学习pytorch那又是另一个问题。

话不多说,细节全在注释中。
show the code
read_data.py

from torch.utils.data import Dataset
import cv2
import os
import numpy as np
import torch
from torchvision import transforms
class Mydata(Dataset):

    def __init__(self,img_path):# 用于设置类中的变量
        self.img_path=img_path
        self.img_list=os.listdir(img_path)
        print(self.img_list[0])

    def __getitem__(self, idx):
        img_name = self.img_list[idx]
        img_item_path = os.path.join(self.img_path,img_name)
        img = cv2.imread(img_item_path)
        img = cv2.resize(img,(224,224),interpolation=cv2.INTER_LINEAR)
        # 这里需要注意opencv独特图像存储方式
        trans = transforms.ToTensor()
        img = trans(img)
        #img = torch.from_numpy(img)
        #print(img.shape)
        label = 0
        if img_name[0]=='c':
            label=1
        return img,label

    def __len__(self):
        return len(self.img_list)

model

from torch import nn


class VGG16Net(nn.Module):# 继承父类nn.Module
    def __init__(self):
        super(VGG16Net,self).__init__()
        '''
        如果不用super,每次调用父类的方法是需要使用父类的名字
        使用super就避免这个麻烦
        super()实际上的含义远比这个要复杂。
        有兴趣可以通过这篇博客学习:https://blog.csdn.net/zhangjg_blog/article/details/83033210
        '''
        '''
        A sequential container.
        Modules will be added to it in the order they are passed in the
        constructor. Alternatively, an ``OrderedDict`` of modules can be
        passed in. The ``forward()`` method of ``Sequential`` accepts any
        input and forwards it to the first module it contains. It then
        "chains" outputs to inputs sequentially for each subsequent module,
        专业术语:一个有序的容器,神经网络模块将按照在传入构造器的顺序依次被添加到计算图中执行,同时以神经网络模块为元素的有序字典也可以作为传入参数
        这是一个有序模型容器,输入会按照顺序逐层通过每一模型,最终会返回最后一个模型的输出。
        实现原理:利用for循环 将所有的参数(即子模块)加入到self._module,然后在__call__中调用forward(),
        而forward()函数则会将self.module中的子模块推理一遍,返回值也就是最终结果。
        参考博客:https://blog.csdn.net/dss_dssssd/article/details/82980222 
        '''
        # 第一层,2个卷积层和一个最大池化层
        self.layer1 = nn.Sequential(
            # 输入3通道,输出64通道
课程导语:    人工智能可谓是现阶段最火的行业,在资本和技术协同支持下正在进入高速发展期。当今全球市值前五大公司都指向同一发展目标:人工智能。近几年,人工智能逐渐从理论科学落地到现实中,与生活越来越息息相关,相关的各种职位炙手可热,而深度学习更是人工智能无法绕开的重要一环。 从AlphaGo打败李世石开始,深度学习技术越来越引起社会各界的广泛关注。不只学术界,甚至在工业界也取得了重大突破和广泛应用。其中应用最广的研究领域就是图像处理和自然语言处理。而要入门深度学习,CNN和RNN作为最常用的两种神经网络是必学的。网上关于深度学习的资料很多,但大多知识点分散、内容不系统,或者以理论为主、代码实操少,造成学员学习成本高。本门课程将从最基础的神经元出发,对深度学习的基础知识进行全面讲解,帮助大家迅速成为人工智能领域的入门者,是进阶人工智能深层领域的基石。 讲师简介:赵辛,人工智能算法科学家。2019年福布斯科技榜U30,深圳市海外高层次人才(孔雀人才)。澳大利亚新南威尔士大学全奖博士,SCI收录其发表过的10篇国际期刊学术文章。曾任深圳市微埃智能科技有限公司联合创始人。CSDN人工智能机器学习、深度学习方向满分级精英讲师。授课风格逻辑严谨、条理清晰、循序渐进、循循善诱,化枯燥为如沐春风,所教学生人数过万。 课程设计: 本课程分为5大模块,19小节,共计540时长(约9小时): 第一部分,课程介绍、目标与内容概览。主要学习人工智能深度学习应用场景;熟悉深度学习主流技术;掌握使用keras解决深度学习主要问题(神经网络卷积神经网络、循环神经网络),以及深度学习主要内容:神经网络卷积神经网络、循环神经网络;案例简介。 第二部分,深度学习之多层感知器(MLP)。主要学习多层感知器(MLP);MLP实现非线性分类;深度学习实战准备;Python调用keras实现MLP。 MLP技术点实战案例:第三部分,深度学习之卷积神经网络(CNN)。主要学习卷积神经网络 ; CNN模型分析;主流CNN模型; Python调用keras实现CNN; CNN技术点实战案例:第四部分,深度学习之循环神经网络(RNN)。主要学习循环神经网络;RNN模型分析;Python调用keras实现RNN。 RNN技术点实战案例: 第五部分,综合提升。主要进行迁移学习;混合模型实战准备+综合实战,以及最后进行课程内容总结。 混合模型技术点实战案例
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值