一个专注于计算机编程和硬件学习的博客主
pytorch2.0安装与体验介绍pytorch2.0 相对1.x进行了大版本更新,向下兼容!!!!通过官网阅读可知他最大的更新是torch.compile(),通过编译的方式,用一行代码实现模型的稳定加速。compiled_model = torch.compile(model)这个语句返回一个原来模型的引用,但是将forward函数编译成了一个更优化的版本。官方同时提供一些参数可以使用:def torch.compile(model: Callable, *, mode: Optional[str] = "default", dynamic: bool = False, fullgraph:bool = False, backend: Union[str, Callable] = "inductor", # advanced backend options go here as kwargs **kwargs ) -> torch._dynamo.NNOptimizedModule可以用来做一些更加细节的指定。mode specifie
深度卷积生成对抗网络DCGAN的框架DCGAN设计规则为了使GAN能够很好地适应卷积神经网络架构,DCGAN提出了四点架构设计规则,分别是:使用卷积层替代池化层去除全连接层使用批归一化(batch normalization)使用恰当的激活函数详细解释:第一点:把传统卷积网络中的池化层全部去除,使用卷积层代替。对于判别器,我们使用步长卷积(strided convolution)来代替池化层;对于生成器,我们使用分数步长卷积(fractional-strided convolutions)来代替池化层。上图(步长卷积)表示了卷积层如何在判别器中进行空间下采样(spatial downsampling),输入数据为5×5的矩阵,使用了3×3的过滤器,步长为2×2,最终输出为3×3的矩阵。上图(分数步长卷积)表示的是卷积层在生成器中进行上采样(spatial upsampling),输入为3×3的矩阵,同样使用了3×3过滤器,反向步长为2×2,故在每个输入矩阵的点之间填充一个0,最终输出为5×5。使用上述卷积层替代池化层的目的是让网络自身去学习空间上采样与下采样,使得判别器和生成器都能够有
1. 理解生成对抗网络1.1 什么是生成对抗网络1.1.1 大白话版知乎上有一个很不错的解释,大家应该都能理解:假设一个城市治安混乱,很快,这个城市里就会出现无数的小偷。在这些小偷中,有的可能是盗窃高手,有的可能毫无技术可言。假如这个城市开始整饬其治安,突然开展一场打击犯罪的「运动」,警察们开始恢复城市中的巡逻,很快,一批「学艺不精」的小偷就被捉住了。之所以捉住的是那些没有技术含量的小偷,是因为警察们的技术也不行了,在捉住一批低端小偷后,城市的治安水平变得怎样倒还不好说,但很明显,城市里小偷们的平均水平已经大大提高了。警察们开始继续训练自己的破案技术,开始抓住那些越来越狡猾的小偷。随着这些职业惯犯们的落网,警察们也练就了特别的本事,他们能很快能从一群人中发现可疑人员,于是上前盘查,并最终逮捕嫌犯;小偷们的日子也不好过了,因为警察们的水平大大提高,如果还想以前那样表现得鬼鬼祟祟,那么很快就会被警察捉住。为了避免被捕,小偷们努力表现得不那么「可疑」,而魔高一尺、道高一丈,警察也在不断提高自己的水平,争取将小偷和无辜的普通群众区分开。随着警察和小偷之间的这种「交流」与「切磋」,小偷们都变得非
ResNet网络ResNet的亮点超深的网络结构(超过1000层)提出residual(残差结构)模块。使用Batch Normalization 加速训练(丢弃dropout)。为什么采用residual?在ResNet提出之前,所有的神经网络都是通过卷积层和池化层的叠加组成的。人们认为卷积层和池化层的层数越多,获取到的图片特征信息越全,学习效果也就越好。但是在实际的试验中发现,随着卷积层和池化层的叠加,不但没有出现学习效果越来越好的情况,反而两种问题:梯度消失和梯度爆炸梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大退化问题随着层数的增加,预测效果反而越来越差。如下图所示为了解决梯度消失或梯度爆炸问题,ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。ResNet论文提出
卷积核卷积核本质上是一个非常小的矩阵,最常用的是 3×3 矩阵。主要是利用核与图像之间进行卷积运算来实现图像处理,能做出模糊、锐化、凹凸、边缘检测等效果。神经网络中卷积核的维度和对(3*3,2)的理解(我的理解)图中输入数据为蓝色部分是一张5*5*3的三维图片,padding=1,变为7*7*3。图中权重数据体为红色部分是两个3*3*3的卷积核,因为输入的数据为3维所以每个卷积核都是3维的,又因为要将输入数据变为3*3*2所以需要两个,在神经网络中可以写成(3*3,2)。正式一点:对于RGB图像,图像为3维,若要提取2个特征,可以设置2个3维卷积核进行特征提取,提取结果为2通道的feature map,2个通道互相独立,代表着不同卷积核提取的不同特征。卷积层演示:下面是一个卷积层的运行演示。因为3D数据难以可视化,所以所有的数据(输入数据体是蓝色,权重数据体是红色,输出数据体是绿色)都采取将深度切片按照列的方式排列展现。输入数据体的尺寸是W1=5,H1=5,D1=3,卷积层参数K=2,F=3,S=2,P=1。K:卷积核个数F:卷积核大小S:步长P:填充数就是说,有2个滤波器,滤波器的尺
优化器前言优化器是引导神经网络更新参数的工具,深度学习在计算出损失函数之后,需要利用优化器来进行反向传播,完成网络参数的更新。在这个过程中,便会使用到优化器,优化器可以利用计算机数值计算的方法来获取损失函数最小的网络参数。在深度学习中,不同的优化器只是定义了不同的一阶动量和二阶动量,一阶动量是与梯度相关的函数,二阶动量是与梯度平方相关的函数。常用的优化器主要有随机梯度下降法、Momentum、AdaGrad、RMSProp和Adam优化器。神经网络利用优化器来更新网络参数步骤如下:计算当前时刻t损失函数关于网络参数w的梯度$$ g_t=\nabla loss= \frac{\partial loss}{\partial(w_t)} $$计算当前时刻t一阶动量$m_t$和二阶动量$V_t$计算当前时刻t下降梯度$$ \eta_t=lr\bullet m_t / \sqrt{V_t} $$计算下一时刻t+1参数$$ w_{t+1}=w_t-\eta_t=w_t-lr \bullet m_t / \sqrt{V_t} $$SGD 随机梯度下降法目前,神经网络最常用的为随机梯度下降(Stoch
一只胖橘