首页 >>  正文

numpy特点

来源:baiyundou.net   日期:2024-09-22

前言

卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一,它通过卷积层、池化层、全连接层等结构,可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多,这里就不一一描述了。实战为主当然要从实际问题出发,用代码的方式加深印象。在写代码前,我先说一下为什么我要写这篇文章?

之前我也用 Tensorflow.js 跟着别人试过图片分类,虽然结果是有了,但是对代码的理解和印象并不深刻。后来由于工作业务原因才接触 PyTorch,发现这个框架更好上手,整一圈后就想用这个把之前用得图片也实现一下分类。开始也是看文章实现,但是网上大部分都是用 MNIST 数据集实现的手写字识别,而业务中有时就是一些指定的不规则小众图片识别,所以下面就简单实现一个自定义的图片集归类。




流程

  • 根据自己的定义,收集图片并归类
  • 读取图片数据和归类标签,保存数据集
  • 固定图片大小 (会变形),归一化转张量
  • 定义超参数,损失函数和优化器等
  • 炼丹,重复查看损失值准确率等指标
  • 保存模型参数,加载测试图片分类效果



环境

  • Python 3.8
  • Torch 1.9.0
  • Pillow 10.0
  • Torchvision
  • Numpy
  • Pandas
  • Matplotlib


编码

写代码前已经把需要的图片做好了分类,上面的依赖包也已经安装完毕。由于只是演示这里没有用预训练模型(ResNet、VGG),因为训练时要用的是 Tensor,所以需要先读取文件夹内的图片先转化为 PIL 的对象数据或 Numpy 数据,然后可以对图片进行调整,最后全都转成 Tensor(也可以跳过 PIL 直接转张量)。这里需要注意的是对灰彩图片通道,不同尺寸图的统一处理,就是灰色图的单通道要通过复制的方式创建三个通道,所以图片设置一样的像素大小。因为在卷积网络中,输入的通道数和输入大小要一致,不然可能在训练中报错。


图片数据生成

这里就是遍历各个分类文件夹的图片转换为对象信息数据,和提取所有分类,分别保存到指定位置,当然也可以在这里划分训练数据,校验数据,测试数据,需要的可以扩展这里就跳过了。



批量数据集标准化

这里是读取序列化的图片信息,对所有图片统一像素 (一般配置电脑最好在 100px 以内,不然会很卡) 并标准归一化后,转换为 Tensor。然后判断图片通道数,如果是灰色图,可以复制张量三次以创建三个通道,最后通过 torch 的 DataLoader 在训练前完成数据集的加载。


神经网络模型

这里创建的是卷积神经网络,接收 3 通道,第一层卷积层卷积核 3x3,输出 25 维张量,通过批标准化(BatchNorm2d)进行归一化处理,最后通过 ReLU 激活函数进行非线性变换。第一层池化使用 2x2 的最大池化操作对卷积后的特征图进行下采样。第二层也是卷积和对应的池化,最后是全连接层。将经过池化的特征图展平,然后通过一个有 1024 个神经元的全连接层,再通过 ReLU 激活函数进行非线性变换。之后是一个有 128 个神经元的全连接层,最后再通过 ReLU 激活函数进行非线性变换,输出 5 个神经元代表分类的概率分布。


开始训练

(略)


模型检测

训练完成保存参数到本地,下面就是将加载进的参数来测试其他图片的分类效果,同样的也是将指定图片和训练时一样的转换操作,最后将预测结果取出最大分布索引值,根据索引就可以匹配出分类名称了。另一个是工具函数,将 tensor 格式的图片在预测结果后显示在 pyplot 中。



","gnid":"9bfd4c7745c147176","img_data":[{"flag":2,"img":[{"desc":"","height":383,"title":"","url":"https://p0.ssl.img.360kuai.com/t01ac45c2ddca2f99c8.jpg","width":900},{"desc":"","height":"569","title":"","url":"https://p0.ssl.img.360kuai.com/t01c36ff26e4c77ddd0.jpg","width":"660"}]}],"original":0,"pat":"art_src_0,fts0,sts0","powerby":"pika","pub_time":1698893703000,"pure":"","rawurl":"http://zm.news.so.com/a9a5587604eb93af9f10670028f61a49","redirect":0,"rptid":"8f0780bbac6a4fd5","rss_ext":[],"s":"t","src":"ZERO开发","tag":[],"title":"【PyTorch 卷积】实战自定义的图片归类

洪肥饺690利用python进行数据分析 怎么学 -
刘炉胆19322321424 ______ python进行数据分析主要是numpy、matplotlib这两个模块包,进阶之后,符号运算用scipy,机器学习用scikit-learn,时间序列用pandas,numpy和matplotlib一定要熟练,可以看一下python科学计算这本书,最好从网站上看,因为涉及numpy和matplotlib、scipy的内容不是特别多,但是作为入门该接触的东西都有

洪肥饺690python的numpy的unique是干什么用的 -
刘炉胆19322321424 ______ ①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. ②用于对整组数据进行快速运算的标准数学函数(无需编写循环). ③用于读写磁盘数据的工具以及用于操作内存映射文件的工具. ④线性代数、随机数生成以及傅里叶变换功能. ⑤用于集成由C、C++、Fortran等语言编写的代码的工具.

洪肥饺690为什么numpy的array那么快 -
刘炉胆19322321424 ______ numpy的许多函数不仅是用C实现了,还使用了BLAS(一般Windows下link到MKL的,Linux下link到OpenBLAS).基本上那些BLAS实现在每种操作上都进行了高度优化,例如使用AVX向量指令集,甚至能比你自己用C实现快上许多,更不要说和用Python实现的比..

洪肥饺690Numpy 改变数组维度的几种方法 -
刘炉胆19322321424 ______ NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(通常是元素是数字). 在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank,但是和线性代数中的秩不是一样的,在用python求线代中的秩中,我们用numpy包中的linalg.matrix_rank方法计算矩阵的秩,例子如下).

洪肥饺690python numpy 包 用什么写的 -
刘炉胆19322321424 ______ numpy中的函数大多是用c语言编写的,后来打包成.pyd文件 numpy也会调用Intel的MKL数学函数工具包

洪肥饺690请教朋友们,python中numpy.min 这句话是什么意思 -
刘炉胆19322321424 ______ numpy是一个数据函数库,min是numpy库里面的一个数学函数,用于计算一组数据中的最小值.

洪肥饺690数据科学工具怎样的呢?
刘炉胆19322321424 ______ 数据科学工具如下: 1、SciPy. SciPy (pronounced "Sigh Pie") 是一个开源的数学、科学和工程计算包.SciPy使用NumPy,IPython或Pandas等各种软件包为常用的数学...

洪肥饺690机器学习工具怎么样的呢?
刘炉胆19322321424 ______ 机器学习工具如下: 1、Shogun.SHOGUN是一个机器学习工具箱,专注于支持向... 基于 NumPy、SciPy 和 matplotlib 构建.Scikit-Learn提供了一致且易于使用的API网格...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024