PyTorch
文章平均质量分 61
cqu_shuai
实事求是,不自以为是
展开
-
PyTorch——DenseNet
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.12_densenetDenseNet vs ResNet与ResNet的主要区别在于,DenseNet里模块B的输出不是像ResNet那样和模块A的输出相加,而是在通道维上连结。这样模块A的输出可以直接传入模块B后面的层。在这个设计里,模块A直接跟模块B后面的所有层连接在了一起。这也是它被称为“稠密连接”的原因。DenseNet的主要构建模块是稠密块(dense原创 2021-04-03 18:02:15 · 298 阅读 · 0 评论 -
PyTorch——ResNet实现
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.11_resnet残差块(residual block)在残差块中,输入可通过跨层的数据线路更快地向前传播。我们只需将图中右图虚线框内上方的加权运算(如仿射)的权重和偏差参数学成0,那么f(x)f(x)f(x)即为恒等映射。实际中,当理想映射f(x)f(x)f(x)极接近于恒等映射时,残差映射也易于捕捉恒等映射的细微波动。残差块里首先有2个有相同输出通道数的3×3卷原创 2021-04-03 16:33:49 · 354 阅读 · 0 评论 -
PyTorch——GoogLeNet实现
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.9_googlenetinception块GoogLeNet中的基础卷积块叫作Inception块。Inception块里有4条并行的线路。前3条线路使用窗口大小分别是1×1、3×3和5×5的卷积层来抽取不同空间尺寸下的信息,其中中间2个线路会对输入先做1×1卷积来减少输入通道数,以降低模型复杂度。第四条线路则使用3×3最大池化层,后接1×1卷积层来改变通道数。4条线原创 2021-04-03 16:31:00 · 310 阅读 · 0 评论 -
PyTorch——Batch Normalization(批量归一化)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.10_batch-normBatch Normalization(BN)的作用通常来说,数据标准化预处理对于浅层模型就足够有效了:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的更新依然很容易造成靠近输出层输出的剧烈变化。这原创 2021-04-03 15:35:39 · 17933 阅读 · 1 评论 -
PyTorch——NiN网络的实现
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.8_ninNiN块NiN使用1×1卷积层来替代全连接层,从而使空间信息能够自然传递到后面的层中去。NiN块是NiN中的基础块。它由一个卷积层加两个充当全连接层的1×1卷积层串联而成。其中第一个卷积层的超参数可以自行设置,而第二和第三个卷积层的超参数一般是固定的。def nin_block(in_channels, out_channels, kernel_size,原创 2021-03-28 22:53:17 · 1281 阅读 · 1 评论 -
PyTorch——自注意力(self-attention)机制实现(代码详解)
参考链接https://www.bilibili.com/video/BV1JE411g7XF?p=54https://arxiv.org/abs/1706.03762https://blog.csdn.net/qq_36653505/article/details/83375160简述自注意力机制(self-attention)self-attention可以视为一个特征提取层,给定输入特征a1,a2,⋅⋅⋅ana^{1},a^{2},\cdot \cdot \cdot a^{n}a1,a2原创 2021-03-28 16:24:21 · 89896 阅读 · 55 评论 -
PyTorch——消除随机性
参考链接https://pytorch.org/docs/stable/notes/randomness.htmlhttps://blog.csdn.net/zxyhhjs2017/article/details/91348108https://zhuanlan.zhihu.com/p/141063432?from_voters_page=truehttps://zhuanlan.zhihu.com/p/73711222实验结果的随机性算法在运行过程中会存在许多的随机性,比如参数的随机初始化原创 2021-03-18 13:37:24 · 1259 阅读 · 2 评论 -
PyTorch——VGG实现(附完整代码)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.7_vggVGGVGG的名字来源于论文作者所在的实验室Visual Geometry Group。VGG提出了可以通过重复使用简单的基础块来构建深度模型的思路。VGG块VGG块的组成规律是:连续使用数个相同的填充为1、窗口形状为3×3的卷积层后接上一个步幅为2、窗口形状为2×2的最大池化层。卷积层保持输入的高和宽不变,而池化层则对其减半。我们使用vgg_block函原创 2021-03-15 14:38:35 · 12207 阅读 · 5 评论 -
PyTorch——激活函数
参考链接https://mp.weixin.qq.com/s/irha7DB2l0GfdAJdsPXlMAhttps://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearityhttps://pytorch.org/docs/stable/nn.html#non-linear-activations-otherhttps://zhuanlan.zhihu.com/p/88429934?from原创 2021-03-15 11:09:38 · 630 阅读 · 0 评论 -
PyTorch——AlexNet实现(附完整代码)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.6_alexnetAlexNet网络结构AlexNet v.s. LeNet第一,与相对较小的LeNet相比,AlexNet包含8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。lexNet第一层中的卷积窗口形状是11×11。因为ImageNet中绝大多数图像的高和宽均比MNIST图像的高和宽大10倍以上,ImageNet图像的物体占用更多的像素,原创 2021-03-14 22:29:43 · 19533 阅读 · 10 评论 -
PyTorch——通俗理解torch.einsum
参考链接https://www.cnblogs.com/mengnan/p/10319701.html从einsum表达式恢复为张量计算torch.einsum一般这样用:result=torch.einsum(′xx,xx,xx→xx′,arg1,arg2,arg3)result=torch.einsum\left ( '\textrm{xx,xx,xx}\rightarrow \textrm{xx}',arg1,arg2,arg3\right )result=torch.einsum(′xx原创 2021-03-10 11:58:19 · 4903 阅读 · 1 评论 -
PyTorch——LeNet实现(附完整代码)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.5_lenetLeNetLeNet分为卷积层块和全连接层块两个部分。卷积层块里的基本单位是卷积层后接最大池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。在卷积层块中,每个卷积层都使用5×5的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。这是因为第二个原创 2021-03-07 14:36:28 · 14741 阅读 · 3 评论 -
PyTorch——池化层
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.4_pooling二维最大池化层和平均池化层池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性。同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的互相关性,池化层直接计算池化窗口内元素的最大值或者平均值。该运算也分别叫做最大池化或平均池化。二维最大池化在二维最大池化中,池化窗口从输入数组原创 2021-03-07 14:01:48 · 1499 阅读 · 0 评论 -
PyTorch——多通道卷积
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.3_channels多输入通道当输入数据含多个通道时,我们需要构造一个输入通道数与输入数据的通道数相同的卷积核,从而能够与含多通道的输入数据做互相关运算。由于输入和卷积核各有cic_{i}ci个通道,我们可以在各个通道上对输入的二维数组和卷积核的二维核数组做互相关运算,再将这cic_{i}ci个互相关运算的二维输出按通道相加,得到一个二维数组。这就是含多个通道的输原创 2021-03-07 13:22:56 · 3004 阅读 · 0 评论 -
PyTorch——二维卷积
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter05_CNN/5.1_conv-layer二维互相关计算虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。def corr2d(X, K): h, w = K.shape Y = torch原创 2021-03-07 12:40:49 · 1381 阅读 · 0 评论 -
PyTorch——使用GPU
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter04_DL_computation/4.6_use-gpu查看GPU信息!nvidia-smi # 对Linux/macOS用户有效查看GPU是否可用torch.cuda.is_available()查看GPU数量torch.cuda.device_count()查看当前GPU索引号torch.cuda.current_device()查看GPU名字torch.原创 2021-03-06 16:10:55 · 371 阅读 · 0 评论 -
PyTorch——读取与存储
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter04_DL_computation/4.5_read-write读写Tensor存储save使用Python的pickle实用程序将对象进行序列化,然后将序列化的对象保存到disk,使用save可以保存各种对象,包括模型、张量和字典等。torch.save(x, 'x.pt')读取load使用pickle unpickle工具将pickle的对象文件反序列化为内存。x2 =原创 2021-03-06 15:33:12 · 599 阅读 · 0 评论 -
PyTorch——自定义层
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter04_DL_computation/4.4_custom-layer不含模型参数的自定义层与使用Module类构造模型类似。下面的CenteredLayer类通过继承Module类自定义了一个将输入减掉均值后输出的层,并将层的计算定义在了forward函数里。这个层里不含模型参数。class MyDense(nn.Module): def __init__(self):原创 2021-03-06 15:17:52 · 809 阅读 · 0 评论 -
PyTorch——模型参数的访问、初始化和共享
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter04_DL_computation/4.2_parameters参数的访问我们可以通过Module类的parameters()或者named_parameters()方法来访问所有参数(以迭代器的形式返回),后者除了返回参数Tensor外还会返回其名字。下面,访问多层感知机net的所有参数:for name, param in net.named_parameters(): p原创 2021-03-06 14:52:47 · 1228 阅读 · 0 评论 -
PyTorch——Dropout(丢弃法)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.13_dropoutdropout深度学习模型常常使用丢弃法(dropout)来应对过拟合问题。丢弃法有一些不同的变体。常用的是倒置丢弃法(inverted dropout)。设某隐藏层为hhh,第iii个隐藏单元为hih_{i}hi。当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为ppp,那么有ppp的概率hih_{i}hi原创 2021-03-06 13:46:06 · 1305 阅读 · 0 评论 -
PyTorch——L2范数正则化(权重衰减)
参考资料https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.12_weight-decay权重衰减(weight decay)权重衰减等价于L2范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。手动实现def l2_penalty(w): return (w**2).sum() / 2在计算loss时加上L2正则化项即可:l原创 2021-03-05 21:22:34 · 10001 阅读 · 3 评论 -
PyTorch——实现多层感知机(附完整代码)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.9_mlp-scratchhttps://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.10_mlp-pytorch加载数据依然使用“Fashion-MNIST”数据集。mnist_train = torchvision.datasets.FashionMNIST(root='~/D原创 2021-03-05 18:16:05 · 5505 阅读 · 0 评论 -
PyTorch——从零实现图片分类(附完整代码)
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.4_softmax-regressionhttps://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.5_fashion-mnisthttps://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.7_softmax-re原创 2021-03-05 17:00:13 · 2114 阅读 · 0 评论 -
PyTorch小技巧——动态调整学习率
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.3_linear-regression-pytorch为不同子网络设置不同的学习率可以为不同子网络设置不同的学习率,这在finetune时经常用到。optimizer =optim.SGD([ # 如果对某个参数不指定学习率,就使用最外层的默认学习率 {'params': net.subnet原创 2021-03-03 23:35:52 · 546 阅读 · 1 评论 -
PyTorch——简洁实现线性回归
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.3_linear-regression-pytorch人工构建数据集为了简便,人工构建一个样本数为1000,特征数为2的数据集,模型的真实权重设为[2,−3.4]T\left [ 2,-3.4\right ]^{T}[2,−3.4]T,偏差为4.2,并为数据添加了服从N(0,0.01)N\left ( 0,0.01\right )N(0,0.01)分布的噪声原创 2021-03-03 23:15:20 · 131 阅读 · 1 评论 -
pytorch小技巧——修改tensor数值且不影响反向传播
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter02_prerequisite/2.3_autogradtensor.data如果我们想要修改tensor的数值,但不希望被autograd记录(即不会影响反向传播),可以对tensor.data进行操作。例如:x = torch.ones(1,requires_grad=True)print(x.data) # 还是一个tensorprint(x.data.requires_g原创 2021-02-27 23:44:25 · 4574 阅读 · 1 评论 -
PyTorch——仅使用Tensor和autograd模块构建线性回归模型
参考链接https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.2_linear-regression-scratch线性回归线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。人工构建数据集为了简便,人工构建一个样本数为1000,特征数为2的数据集,模型的真实权重设为[2,−3.4]T\left [ 2,-3.4\right ]^{T}[2,−3.4]T原创 2021-03-03 21:29:03 · 164 阅读 · 1 评论