Pytorch高级应用
参考的书籍是《深入浅出PyTorch——从模型到源码》,书中源代码仓库为https://github.com/zxjzxj9/PyTorchIntroduction
部分代码由于版本兼容性无法运行,文中会做出适当修改
学习路径
由于篇幅限制,我决定将源码学习分为多篇文章依次进行更新,以下为推荐的博客学习路径
Pytorch学习(基础知识)
Pytorch学习(运行逻辑)
Pytorch高级应用
Pytorch常用层级
在深度学习神经网络中,整个神经网络的结构是由不同类型的层构建而来的,而层与层之间通过激活函数相连接
线性层
线性层,也称为全连接层,是最基础的深度学习模块,可以用于变换特征的维度
线性层实际上执行的是一个线性变换,在二维的情况下,相当于做了一个矩阵乘法和一个矩阵加法,即y=x⋅W+b\pmb y = \pmb x\cdot \pmb W + \pmb by=x⋅W+b
当然,很多时候线性层的输入并不是一维或二维的张量,而是高维的张量
123456import torchimport torch.nn as nnlm = nn.Linear(5, 10) ...
Pytorch学习(运行逻辑)
参考的书籍是《深入浅出PyTorch——从模型到源码》,书中源代码仓库为https://github.com/zxjzxj9/PyTorchIntroduction
部分代码由于版本兼容性无法运行,文中会做出适当修改
学习路径
由于篇幅限制,我决定将源码学习分为多篇文章依次进行更新,以下为推荐的博客学习路径
Pytorch学习(基础知识)
Pytorch学习(运行逻辑)
Pytorch高级应用
Pytorch底层逻辑
Pytorch中的模块简介
模块类
模块本身是一个类nn.Module,Pytorch的模型通过继承该类,在类的内部定义子模块的实例化,通过前向计算调用子模块,最后实现深度学习模型的搭建
下面给出继承nn.Module类的示例
1234567891011import torchimport torch.nn as nnclass Model(nn.Module): def __init__(self, ...): # 定义类的初始化函数,...是用户的传入参数 super(Model, self).__init__() ...
Pytorch学习(基础知识)
参考的书籍是《深入浅出PyTorch——从模型到源码》,书中源代码仓库为https://github.com/zxjzxj9/PyTorchIntroduction
部分代码由于版本兼容性无法运行,文中会做出适当修改
前言
众所周知,炼丹现在已经成为当下最热门的方向,当然这也是因为大家看到了人工智能的前景和潜力
我在本科阶段也多次使用Pytorch进行过模型的训练,但是我总是困惑于一些代码的运作方式,有时候为了深究这些,会花费大量的时间对一些代码进行整合
除此之外,当我有一些新奇的想法时,也很难将其在Pytorch的框架下付诸实践,因为我不懂代码之间是如何配合的,类之间的关系是什么,类的方法该怎么用,我都是一知半解的三脚猫
综上,我终于下定决心,静下心来阅读Pytorch源码,为了打好基础,也是为了提高我的惨不忍睹的代码水平
由于前序课程学习了基础的机器学习的知识,所以此处直接略过理论部分的讲解,直接阅读源码
此处使用的Pytorch版本为1.13.1,Python版本为3.9.19,CUDA版本为12.5,可以用以下代码检查Pytorch版本
12import torch ...
Pixel2刷机
最近心血来潮,想把自己手上的砖头机子(Google Pixel 2)刷个Ubuntu Touch系统
根据UBports的提示,我需要先把手机从安卓11降级到安卓9
前置操作:解锁Bootloader,开启开发者模式,打开USB debugging模式和解锁OEM,电脑下载adb工具
在安装完adb工具后,需要注意确认电脑能识别到设备,例如
还需要去Google开发者那里下载一下对应手机的固件包
如果出现了以下界面
说明这个节点被ban了,得换一个再试试
我们再去下载TWRP
回退到安卓9需要选择这两个文件下载
回退系统
在下载好文件之后,可以运行命令
1adb reboot bootloader
过一小会,手机就会重启至Bootloader模式
此时再运行flash-all.bat文件(文件在walleye-pq3a.190801.002-factory-f9a5e230.zip内)进行fastboot
如果fastboot无法识别到手机,即一直停留在
1< waiting for any device >`
说明电脑的驱动可能出现了问题
可以打开设备管理器查 ...
Scrapy爬虫
Scrapy初步认识
Scrapy模块安装
首先,我们需要先搭建好Scrapy的环境
利用conda创建一个名为Scrapy_work的虚拟环境并且进入该环境
12conda create -n "Scrapy_work"conda activate Scrapy_work
然后使用pip安装Scrapy模块
1pip install Scrapy
为了确认Scrapy模块已经安装成功,可以在Python当中测试一下能否导入Scrapy模块
12import scrapyscrapy.version_info
如果正确安装的话,终端会显示Scrapy的版本
编写Scrapy爬虫
Scrapy框架结构及其工作原理
上图为Scrapy框架是组成结构
Scrapy框架中的各个组件的介绍如下所示
组件
描述
类型
ENGINE
引擎,框架的核心,其他所有组件在其控制下协同工作
内部组件
SCHEDULER
调度器,负责对SPIDER提交的下载请求进行调度
内部组件
DOWNLOADER
下载器,负责下载页面(发送HTTP请求和接收HTTP响应 ...
NLP入门
词嵌入:编码形式的词汇语义
词嵌入是一种由真实数字组成的稠密向量,每个向量都代表了单词表里的一个单词
在自然语言处理中,总会遇到这样的情况:特征全是单词! 但是,如何在电脑上表述一个单词呢?
你在电脑上存储的单词的 ASCII 码,但是它仅仅代表单词怎么拼写,没有说明单词的内在含义(你也许能够从词缀中了解它的词性,或者从大小写中得到一些属性,但仅此而已)
更重要的是,你能把这些 ASCII 码字符组合成什么含义?当VVV代表词汇表、输入数据是∣V∣|V|∣V∣维的情况下,我们往往想从神经网络中得到数据密集的结果,但是结果只有很少的几个维度(例如,预测的数据只有几个标签时),我们如何从大的数据维度空间中得到稍小一点的维度空间?
放弃使用 ASCII 码字符的形式表示单词,换用one-hot encoding会怎么样了?好吧,ω\omegaω这个单词就能这样表示:
yi^∈T\hat{y_i}\in T
yi^∈T
其中,1表示的独有位置,其他位置全是0。其他的词都类似,在另外不一样的位置有一个1代表它,其他位置也都是0。这种表达除了占用巨大 的空间外,还有个很大的缺陷。它只是简单的 ...
数字图像处理
导论
存储格式
数字化后的图像数据在计算机中一般有两种存储方式,一种是位图模式,而另一种是矢量图模式
位图又称点阵图,是将图像的每一点数值存放在以字节为单位的矩阵中
矢量图不存储图像数据的每一点,而是存储图像内容的轮廓部分
色彩存储
RGB
我们最熟悉的色彩表现方式就是以红绿蓝三原色为基色的RGB
颜色
R
G
B
红
255
0
0
绿
0
255
0
蓝
0
0
255
黄
255
255
0
紫
255
0
255
青
0
255
255
白
255
255
255
黑
0
0
0
灰
128
128
128
BGR
其实就是RGB颠倒了一下,区别不大,但是OpenCV库当中常常使用BGR(历史遗留问题)
CMYK
CMYK中的每个字母代表一种颜色(青、品红、黄、黑),每个数字的取值范围为000~100%100\%100%,百分比越高,说明颜色中含有这种原色的比例越高,常用于平面印刷
分辨率
图像的空间分辨率
图像的空间分辨率是指图像中每单位长度所包含的像素或点的数目,常以像素/英寸(pixels per ...
数据降维
数据降维算法
数据降维是针对高维度数据的数据预处理方法
简而言之,降维是将高维度的数据转换为低维度的数据,保留其最重要的一些特征且去除噪声和其他不重要的特征,从而提升数据处理的速度
对于高维度的数据,有一个概念称为:维数灾难[1]
其描述的是在高维空间中的一些反直觉的现象,下面列出其中两点:
高维空间中的数据样本极其稀疏
高维单位空间当中的数据几乎全部位于超立方体的边缘
单位超立方体的体积为
Vhypercube=1d=1V_{hypercube} = 1^d = 1
Vhypercube=1d=1
而其内切的超球体的体积公式如下
Vhypersphere=πn2Γ(n2+1)⋅0.5dV_{hypersphere} = \frac{\pi^{\frac n2}}{\Gamma(\frac n2 + 1)}\cdot 0.5^d
Vhypersphere=Γ(2n+1)π2n⋅0.5d
对两者的商作极限可得
limd→+∞VhypersphereVhypercube=0\lim_{d\rightarrow+\infty}\frac{V_{hypersphere}}{V ...
系统建模与仿真笔记
系统仿真概述
系统与模型
系统
系统是指物质世界中既相互制约又相互联系着的,能够实现某种目的的一个整体
也就是说系统是一个由多个部分组成的,按一定规律连接的,具有特定功能的整体
任何系统都存在四个方面的内容:实体,属性,活动和环境
模型
系统模型实质上是一个由研究目的所确定的,关于系统某一方面本质属性的抽象和简化,并以某种表达形式来描述
系统模型一般可以分为:物理模型和数学模型
为了分析研究一个系统,通常会进行各种实验,其一是在已经存在的真实系统上进行,其二是通过构造模型,利用模型试验的方法进行
其中,第二种形式的实验越来越多,理由如下:
系统还处于设计阶段时,真实系统尚未建立需要了解未来系统的性能,只能通过对模型的试验来确认
在真实系统上进行试验可能会引起破坏或发生故障
系统无法恢复,如经济系统,若造成损失则无法挽回
试验条件无法保证,如进行多次试验难以保证试验条件相同,或试验时间太长,或费用昂贵
系统仿真的概念
仿真
系统仿真的必要性体现在以下方面:
优化设计:在复杂的系统建立以前,能够通过改变仿真模型结构和调整参数来优化系统设计,对系统和系统的某 ...
对抗网络入门
什么是GAN
GANs是用于DL(Deep Learning)模型去捕获训练数据分布情况的框架,以此我们可以从同一分布中生成新的数据
GANs是有Ian Goodfellow于2014年提出,并且首次在论文Generative Adversarial Nets中描述。它们由两个不同的模型组成,一个是生成器,一个是判别器
生成器的工作是产生看起来像训练图像的“假”图像;判别器的工作是 查看图像并输出它是否是真实的训练图像或来自生成器的伪图像
在训练期间,产生器不断尝试通过产生越来越好的假动作来超越判别器,而判别器则是为了更好地检测并准确地对真实和假图像进行分类
这个游戏的平衡是当生成器产生完美的假动作以使假图像看起来像是来自训练数据,而判别器总是猜测生成器输出图像为真或假的概率为50%
现在,我们开始定义在这个教程中使用到的一些符号
判别器的符号定义
设xxx表示代表一张图像的数据,D(x)D(x)D(x)是判别器网络,它输出xxx来自训练数据而不是生成器的(标量)概率
这里,由于我们处理图像,D(x)D(x)D(x)的输入是CHW大小为3x64x64的图像
直观地,当xxx来自训 ...