- 博客(40)
- 收藏
- 关注
原创 NNDL 作业12:第七章课后题
这两个是偏差修正公式,它是为了调整初始的v、m值而设计的,因为一开始由于v、m的值都来自于他们对应的指数移动平均,但是起步时的值很小(见下图),因此要通过偏差修正将其值放大,从而为初始的若干个步骤提供较大的‘动量’。主要是为了降低批量过小带来的不稳定性风险,防止它更新时前往偏离方向太远,因为当批量越大时,梯度方向更具有代表性,随机梯度下降偏离正常方向的概率要更低,因此可以调整更大的学习率,批量越小时正相反,选取的梯度方向更容易偏离目标方向,因此选用较小的学习率来限制其更新步骤。并据此计算SGD更新过程。
2022-12-13 17:21:48 860 4
原创 NNDL 实验八 网络优化与正则化(3)不同优化算法比较
除了批大小对模型收敛速度的影响外,学习率和梯度估计也是影响神经网络优化的重要因素。神经网络优化中常用的优化方法也主要是如下两方面的改进,包括:学习率调整:通过自适应地调整学习率使得优化更稳定。AdaGrad、RMSprop、AdaDelta算法等。梯度估计修正:通过修正每次迭代时估计的梯度方向来加快收敛速度。动量法、Nesterov加速梯度方法等。本节还会介绍综合学习率调整和梯度估计修正的优化算法,如Adam算法。
2022-12-11 20:26:27 572
原创 NNDL 作业11:优化算法比较
这个就是上面函数俯视角度的梯度方向。箭头长的 地方表示梯度大,短的地方表示梯度小,而且两端的梯度方向明显偏离最优点方向。SGD算法:随机梯度下降法是对GD的简化,因为SGD在每一步放弃了对梯度准确性的追求,每步仅仅随机采样少量样本来计算梯度。但是这也导致了他的一个很大的缺点就是对导数的梯度采集的不够准确,它只随机采取了样品中的部分梯度代替了所有样本的梯度,所以梯度方向显示出了很强的波动性。其他的算法:Momentum、AdaGradMomentum动量法是对前几步 的梯度进行加
2022-12-06 13:23:22 634
原创 NNDL 实验七 循环神经网络(3)LSTM的记忆能力实验
使用LSTM模型重新进行数字求和实验,验证LSTM模型的长程依赖能力。使用第6.1.2.4节中定义Model_RNN4SeqClass模型,并构建 LSTM 算子.只需要实例化 LSTM ,并传入Model_RNN4SeqClass模型,就可以用 LSTM 进行数字求和实验。自定义LSTM算子nn.LSTM相较于简单的RNNcell,LSTMcell有着更为复杂的结构,包括三个门,一个记忆单元,根据LSTM的结构,现定义LSTMcell类,代替之前的RNNcell类。将自定义LSTM与pytorch内
2022-12-04 17:08:57 780
原创 NNDL 作业10:第六章课后题(LSTM | GRU)
令Zk=Uhk−1+Wxk+b为在第k时刻函数g(·)的输入,在计算公式δt,k=∂zk∂Lt中的误差项zk=Uhk−1+Wxk+b时,梯度可能会过大,从而导致梯度爆炸问题.解决方式:1.更换激活函数,比如可以选择 ReLU 函数。
2022-11-29 18:37:06 883
原创 NNDL 实验七 循环神经网络(一) 梯度爆炸实验
造成简单循环网络较难建模长程依赖问题的原因有两个:梯度爆炸和梯度消失。一般来讲,循环网络的梯度爆炸问题比较容易解决,一般通过权重衰减或梯度截断可以较好地来避免;对于梯度消失问题,更加有效的方式是改变模型,比如通过长短期记忆网络LSTM来进行缓解。本节将首先进行复现简单循环网络中的梯度爆炸问题,然后尝试使用梯度截断的方式进行解决。这里采用长度为20的数据集进行实验,训练过程中将进行输出W,U,b的梯度向量的范数,以此来衡量梯度的变化情况。
2022-11-27 17:47:38 147
原创 NNDL 实验七 循环神经网络(一) RNN记忆能力实验
实验表明了一种现象,SRN不能支持较长序列的训练过程,就像神经网络不能层数过深一样,他们之间的原因是否有联系呢?以后我们会学到。
2022-11-22 22:00:00 448
原创 NNDL 作业8:RNN - 简单循环网络
简单循环网络 ( Simple Recurrent Network , SRN) 只有一个隐藏层的神经网络。
2022-11-13 23:10:04 274
原创 NNDL 实验六 卷积神经网络(5)使用预训练resnet18实现CIFAR-10分类
图像分类(Image Classification)计算机视觉中的一个基础任务,将图像的语义将不同图像划分到不同类别。很多任务可以转换为图像分类任务。比如人脸检测就是判断一个区域内是否有人脸,可以看作一个二分类的图像分类任务。数据集:CIFAR-10数据集,网络:ResNet18模型,损失函数:交叉熵损失,优化器:Adam优化器,Adam优化器的介绍参考NNDL第7.2.4.3节。评价指标:准确率。
2022-11-09 20:47:03 776
原创 NNDL 实验六 卷积神经网络(4)ResNet18实现MNIST
残差网络(Residual Network,ResNet)是在神经网络模型中给非线性层增加直连边的方式来缓解梯度消失问题,从而使训练深度神经网络变得更加容易。在残差网络中,最基本的单位为残差单元。
2022-11-07 20:19:05 369
原创 NNDL 实验六 卷积神经网络(3)LeNet实现MNIST 手动算子部分
手写体数字识别是计算机视觉中最常用的图像分类任务,让计算机识别出给定图片中的手写体数字(0-9共10个数字)。由于手写体风格差异很大,因此手写体数字识别是具有一定难度的任务。我们采用常用的手写数字识别数据集:MNIST数据集。MNIST数据集是计算机视觉领域的经典入门数据集,包含了60,000个训练样本和10,000个测试样本。这些数字已经过尺寸标准化并位于图像中心,图像是固定大小(28×28像素)。LeNet-5虽然提出的时间比较早,但它是一个非常成功的神经网络模型。基于LeNet-5的手写数字识别
2022-11-02 18:45:00 598
原创 pytorch中自定义参数基于auto_grad的随机下降法梯度更新的几种方式
这种是直接用梯度更新后的值新建一个节点,再将新建节点的requires_grad设为True,这样做的好处是不用再梯度清零了。问题出在参数更新部分,也就是说X也需要.data才能正常赋值,改成这样就可以了。如果你曾经见过这种报错,那么恭喜你,你和我踩了一样的坑。上面是最常见的更新方式。
2022-11-02 18:45:00 576
原创 NNDL 作业7:第五章课后题(1×1 卷积核 | CNN BP)
卷积的交换性,是卷积的一种优秀的数学性质。如果不限制卷积信号的长度,真正的翻转卷积是具有交换性的,即x∗y=y∗x,对于互相关的卷积,也同样具有一定的交换性。
2022-10-30 15:49:11 251
原创 基于numpy的卷积类的功能改善
实验中的代码有问题,现对其进行修缮。主要是对forward函数进行修正,并整理打印内容。现在支持多batch多通道卷积。
2022-10-27 22:56:55 645
原创 NNDL 实验六 卷积神经网络(2)基础算子 基于numpy和基于pytorch的的多通道卷积类与池化层类
卷积样例,如下是运行一个卷积层的样例,因为三维卷积很难表现,所有的输入层(蓝色)权重(红色),输出(绿色)都在一排中展示,输入的一卷w=5,h=5,d=3,卷积层的参数k=2,f=3,s=2,p=1,也就是说,我们有两层卷积核,他们的步长为2,除此之外,输出尺寸为(5-2+3)+1=3,此外,注意到填充p=1,给输入围上了一圈0,图示显示了输出活动(绿色),并且展现了每个元素都是由高亮的输入(蓝色)和对应的卷积核(红色)的点积,再加到一起,然后整体加上偏置b。内容原图见文章末尾comefrom链接。
2022-10-26 00:19:13 357
原创 NNDL 作业6:基于CNN的XO识别
自定义卷积算子、池化算子实现调用框架自带算子实现,对比自定义算子可视化卷积核和特征图手动numpy实现和调用pytorch实现的卷积结果一样。对于卷积核的权重特征,我们发现它的特征图强化了源图像中具有卷积核特征的部分,同时抑制了没有卷积核特征的部分。这种特征越不明显的地方的抑制程度越大,反之特征明显的地方特征值越大。参考代码卷积-池化-激活_HBU_David的博客-CSDN博客模拟的网络结构图其中conv代表的是卷积层,relu代表relu激活层,fc代表的是全连接层。QQ群下载【注】QQ
2022-10-23 15:54:16 165
原创 NNDL 实验六 卷积神经网络(1)卷积 边缘检测之传统边缘检测算子和基于pytorch的Canny边缘检测
受生物学上感受野机制的启发而提出。一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络有三个结构上的特性:局部连接、权重共享、汇聚。具有一定程度上的平移、缩放和旋转不变性。和前馈神经网络相比,卷积神经网络的参数更少。主要应用在图像和视频分析的任务上,其准确率一般也远远超出了其他的神经网络模型。近年来卷积神经网络也广泛地应用到自然语言处理、推荐系统等领域。这里只涉及通常意义上的图像卷积。在本书后面的实现中,算子都继承paddle.nn.Layer,并使用支持反向传播的飞桨API进行实现,这样
2022-10-20 20:40:15 2355
原创 NNDL 作业5:卷积与几种常见的卷积核
在图像卷积中,我们对边界的像素点的卷积次数比在中间调像素点要少,为了利用上这些卷积次数比较少的像素点,我们在图像的四周加上一层或多层数值确定的像素点(通常是0),从而把原始图像的边缘给“包裹起来”,这样原本的边缘信息就会被多卷积几次,在一定程度上减少了图片的特征丢失。在图像卷积中,那两个函数分别是原图和卷积核,我们先将卷积核和原始图像对齐,然后计算重叠部分的点积结果,计算完一个后,将卷积核按一定步长向后移动,这样一直重复直到卷积核移动到图像的末尾。和突出显示的原理类似,但是强度和范围比边缘检测的要小一些。
2022-10-16 01:06:43 2024
原创 NNDL 实验五 前馈神经网络(3)鸢尾花分类 深入理解Iris数据集
画出数据集中150个数据的前两个特征的散点分布图:【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类继续使用第三章中的鸢尾花分类任务,将Softmax分类器替换为前馈神经网络。损失函数:交叉熵损失;优化器:随机梯度下降法;评价指标:准确率。若无特别说明,实验默认所用第三方库:4.5.1 小批量梯度下降法为了减少每次迭代的计算复杂度,我们可以在每次迭代时只采集一小部分样本,计算在这组样本上损失函数的梯度并更新参数,这种优化方式称为小批量梯度下降法(Mini-Batch Gradient D
2022-10-14 21:34:32 1333
原创 关于反向传播是否更新偏置b的探索 2.0
在研究神经网络反向传播过程中发现很多资料的参数更新过程都只分析了参数w的更新,而作为参数的b到底更不更新呢?
2022-10-10 09:00:00 1039
原创 NNDL 作业4:第四章课后题 Relu死亡节点问题
这时候反向传播计算梯度时,因为损失对零求偏导是没有意义的,这个节点的参数自然也就没法进行更新,那么它前面的节点也就没办法更新和这个无意义的节点有关的部分。坐标为(0,0),(1,1)的点的标签的标签表示为0,坐标为(0,1),(1,0)的点的标签为1。只有当每次参数更新都保证Relu的输入都为正数的时候,模型才会理想的进行,但是这有一定运气的成分,因此经常使用Sigmoid作为激活函数进行二分类任务。实际上还有其他情况。例如,当h1的Relu输出为0时,也就是h1输出为0时,这个节点的参数就没办法更新了。
2022-10-08 23:01:17 910
原创 NNDL 实验五 前馈神经网络(2)自动梯度计算和优化问题
使用Paddle的预定义算子来重新实现二分类任务。主要使用到paddle.nn.Linear。为提高对比的直观性,现添加代码实现参数和结果的可视化。数据集选用双月数据集。使用pytorch的预定义算子来重新实现二分类任务。(必做)
2022-10-07 20:05:13 547
原创 NNDL 作业3:分别使用numpy和pytorch实现FNN例题
====输入值:x1, x2;真实输出值:y1, y2=====损失函数(均方误差): 0.010019990615546703。损失函数(均方误差): 0.006001585628837347。损失函数(均方误差): 0.005511465482413769。损失函数(均方误差): 0.005217039026319981。=====输入值:x1, x2;真实输出值:y==========更新前的权值==========更新前的权值==========第100轮=====
2022-10-02 22:05:28 354
原创 NNDL 实验五 前馈神经网络(1)二分类任务 神经元与基于前馈神经网络的二分类任务
pytorch实现使用pytorch计算一组输入的净活性值z净活性值z经过一个非线性函数f(·)后,得到神经元的活性值a使用pytorch计算一组输入的净活性值,代码参考paddle例题:torch运行结果:input X: tensor([[0.4815, 0.9213, 0.1646, 0.5270, 0.3404]])weight w: tensor([[0.1197],[0.2219],[0.7890],[0.7074],[0.0379]])bias b: tensor([[0.
2022-09-29 16:01:51 925 1
原创 NNDL 作业2
若我们想要得到更小的损失则需要模型预测得到的预测标签整体与One-Hot编码的真实标签相近,这对于模型来说计算精度要求过高,在分类我们上我们往往只关注模型对数据的真实类别的预测概率而不关注对其他类别的预测概率。答:Softmax回归中使用的𝐶个权重向量是冗余的,即对所有的权重向量都减去一个同样的向量 𝒗,不改变其输出结果。答:在使用One-Hot编码表示分类问题的真实标签的情况下,我们使用平方损失函数计算模型的预测损失时会计算预测标签中每一个类别的可能性与真实标签之间的差距。(=w)上的投影,d=||
2022-09-23 23:00:11 309
原创 NNDL 实验四 线性分类 基于Logistic回归的二分类任务、基于Softmax回归的多分类任务和基于Softmax回归完成鸢尾花分类任务
。
2022-09-21 21:00:46 1766 1
原创 NNDL 作业1:第二章课后题
在使用MSE时,w、b的梯度均与sigmoid函数对z的偏导有关系,而sigmoid函数的偏导在自变量非常大或者非常小时,
2022-09-18 18:24:27 331
原创 NNDL 实验三 线性回归、多元线性回归、Runner类的封装和基于线性回归的波士顿房价预测
机器学习方法流程包括数据集构建、模型构建、损失函数定义、优化器、模型训练、模型评价、模型预测等环节。为了更方便地将上述环节规范化,我们将机器学习模型的基本要素封装成一个Runner类。除上述提到的要素外,再加上模型保存、模型加载等功能。Runner类的成员函数定义如下:__init__函数:实例化Runner类,需要传入模型、损失函数、优化器和评价指标等;train函数:模型训练,指定模型训练需要的训练集和验证集;
2022-09-16 21:02:39 1650
原创 NNDL 实验二 pytorch入门——tensor和简单的数据预处理
如果PyTorch操作支持广播,则其Tensor参数可以自动扩展为相等大小(无需复制数据)
2022-09-08 22:51:10 1015
原创 关于dataframe的groupby结果的数据类型的问题
dataframe是迭代器中每个元组的第二个元素,因此对分组后的数据再次进行处理时,需要展开迭代器,然后取出其中的第二个元素。
2022-09-07 22:49:19 450
原创 NNDL 实验一 numpy 的array操作
9.建立矩阵a ,初始化为[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]],输出(0,0),(1,2),(2,0),(3,1) (提示使用 b = np.array([0, 2, 0, 1]) print(a[np.arange(4), b]))3.建立一个二维数组 b,初始化为 [ [4, 5, 6],[1, 2, 3]] (1)输出各维度的大小(shape)(2)输出 b(0,0),b(0,1),b(1,1) 这三个元素(对应值分别为4,5,2)......
2022-08-30 13:55:29 2185
原创 初建LeNet神经网络,用pytorch实现手写数字识别
环境为python3.8,如果系统支持gpu加速的话,可以把数据上传到gpu加速,我这里没用gpu,直接在cpu上训练。gpu加速详细操作不做赘述。数据库用的经典的MINIST库,包含60000张训练图片和10000张测试图片。上代码:(含注释)# coding:utf-8import torchimport torchvisionimport torchvision.transforms as transformsimport torch.nn as nnimport osos
2021-11-02 01:37:53 782
原创 用python编写习题自动生成工具
用到了两个库:random、docx# coding=utf-8'''习题自动生成工具自动生成数学练习题,包含加减乘除,不规定数值范围,由传入的参数(10:10以内;100:100以内)决定。要求1:输入:生成习题数量N,习题范围:M;输出:将生成的习题保存到question(word格式)中,对应的答案保存到answer(word格式)中。'''import randomimport docxN = int(input("请输入需要生成的题的数量:\n"))M = int(
2021-10-08 17:05:46 1293
原创 用c++实现合并两个一元多项式并求一介导
#include<iostream>using namespace std;#define MAXSIZE 1000/*一元多项式求导*/int main() { int a[MAXSIZE][2]; int b[MAXSIZE][2]; int num1,num2; cin >> num1 ; for (int i = 0; i < num1; i++) { cin >> a[i][0] >> a[i][1]; } c.
2021-10-05 17:36:10 350 1
原创 python实现:读取PDF文件中的英文单词,并将前二十个高频词储存到一个docx文档中
总体思路如下:1.读取PDF文件,将其中的英文单词提取出来2.获得每个英文单词的词频,通过字典将英文单词及其词频配对3.将英文单词按照词频由大到小排序4.创建并写入docx文档首先打开PDF文件用到了pdfplumber第三方库,具体应用如此下:with pdfplumber.open(pdf_path) as pdf_file: content = '' for i in range(len(pdf_file.pages)): #
2021-09-30 22:08:28 3291 1
原创 PTA 2-9 彩虹瓶 (20 分)(C语言)
2-9 彩虹瓶 (20 分)彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,
2021-09-29 10:56:41 1028
原创 PTA 2-6 两个有序序列的中位数 (20 分)
2-6 两个有序序列的中位数 (20 分)已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,⋯,AN−1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。输出格式:在一行中输出两个输入序列的并集序列的中位数。输入样例1:51 3 5 7 92 3
2021-09-27 19:54:44 120
原创 PTA 2-5 Two Stacks In One Array (20 分)
2-5 Two Stacks In One Array (20 分)Write routines to implement two stacks using only one array. Your stack routines should not declare an overflow unless every slot in the array is used.Format of functions:Stack CreateStack( int MaxElements );int Is
2021-09-27 00:16:35 108
原创 PTA 2-4 另类堆栈 (20 分)
2-4 另类堆栈 (20 分)在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?函数接口定义:bool Push( Stack S, ElementType X );ElementType Pop( Stack S );其中Stack结构定义如下:typedef int Position;typedef struct SNode *PtrToSNode;struct SNode {
2021-09-26 21:33:44 258
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人