深度学习
文章平均质量分 53
本人从零开始,系统的对神经网络的学习笔记
Tomorrow'sThinker
这个作者很懒,什么都没留下…
展开
-
卷积神经网络构建(pytorch)
在不设置stride(步长)的情况下,默认为一,可以通过对步长的设置来控制特征图的大小。但是当步长为1时,会出现中间部分被重复扫描的现象,‘中间重边缘轻’。当步长为3时,卷积核不会出现重复扫描的过程,但是最右边无法被扫描到,这时候需要用填充法对图像进行填充,由参数padding和padding_mode来控制。padding=1时,图像的上下左右各添加一个像素,padding_mode则可以选择要填充的值。其中输出通道和我们输入数据的通道数保持一致,输入通道和卷积核大小由自己决定,但要注意,原创 2023-03-13 17:04:24 · 507 阅读 · 1 评论 -
包含BN层的神经网络的学习率优化
结果由上图我们基本可以得出结论,学习率的变化会嚷有bn层的模型有较大的波动,即有bn层的模型对学习率变化更加敏感,而对于此类模型而言,调整学习率往往会获得更好的效果。原创 2022-11-10 09:16:35 · 675 阅读 · 0 评论 -
利用nn.BatchNorm构建带BN的神经网络
在上面模型中加入bn层,模型效果反而会变差,此时需要和别的参数进行联合调参。原创 2022-09-14 20:01:53 · 1059 阅读 · 0 评论 -
nn.Sequeential快速建模方法以及nn.init模型参数自定义方法
让参数值服从均值为0,方差为1的正态分布。让参数值服从0到1之间的均匀分布。用常量1代替参数所有取值。原创 2022-07-22 17:07:15 · 389 阅读 · 0 评论 -
模型优化方法
当迭代次数越多,越容易陷入我们梯度全为零的问题中,而较小的学习率就以为更小的步长,此时模型更加保守,更加不容易走到梯度为零的位置,而更小的梯度则需要更多的迭代次数(迭代次数与计算量有关),但relu函数的计算量相对于前两个函数来说较小,不会有显著提升(初始化输入的数据不能让梯度为零)。但是,如果梯度更新中,出现个别参数,较大的情况,则更新过程会出现波动,一部分更新很快,一部分得不到更新,出现梯度爆炸(梯度不平稳)的情况。根据上面的导函数图像性质,当输入数据为负时,会存在导函数取值为零,...原创 2022-07-21 11:34:04 · 1685 阅读 · 1 评论 -
深度学习欠拟合下的模型调优
优化:增加网络复杂度(不增加激活函数):可以画图观察到,对于loss来说没有显著的提升,但是稳定性得以提高。所以加入简单的线性层并不能达到拟合高此项的目的,后续我们加入激活函数对比之后可以确定的是,有relu激活函数的模型最稳定,且效果相对最好.........原创 2022-07-06 16:56:32 · 407 阅读 · 0 评论 -
深度学习数据集生成函数的创建与使用
dataset和dataloader:通过生成数据的生成器或者保存数据的映射关系来避免数据的重复储存数据生成:我们自己生成含有一定规律的数据集,三个函数可以分别生成回归,分类,小批量随机的数据集,利用该数据集,实现一些简单的模型回归模型(手动创建):快速实现(调库):......原创 2022-06-29 14:58:52 · 1021 阅读 · 0 评论 -
分类,回归,随机小批量数据生成
数据集创建函数原创 2022-06-20 15:07:27 · 182 阅读 · 0 评论 -
神经网络实战案例(含思路和全代码)- 在 Fashion-MNIST 数据集上实现完整的神经网络
背景:数据集中有十种物品的图片目标:构建一个完整的神经网络,能识别这些图片实现流程:导入数据集:import torchvisionimport torchvision.transforms as transformsimport torchimport torch.nn as nnimport torch.optim as optimfrom torch.nn import functional as Ffrom torch.utils.data import Da原创 2022-05-28 18:00:00 · 1125 阅读 · 0 评论 -
迭代过程:batch和epochs
引入对于上一篇代码,一般来说要实现多次迭代,则需要循环下面这几步 zhat = net.forward(x) loss = loss_function(zhat,y.long()) loss.backward() opt.step() opt.zero_grad()问题在于,实际情况中数据量较大,所有数据都要一遍正向传播和反向传播消耗时间,计算量过大这里就采用深度学习入门级优化算法:小批量随机梯度下降 -- 每次迭代前都会从整体的样本中抽一批固定数目的样本原创 2022-05-27 17:45:00 · 818 阅读 · 0 评论 -
优化算法 -- 动量法Momentum
引入对于普通的梯度下降算法,就是重复正向传播,计算梯度,更新权重的过程。表示为:import torchimport torch.nn as nnclass Model(nn.Module): def __init__(self,in_feature=10,out_feature=3): super(Model, self).__init__() self.linear1 = nn.Linear(in_feature,13) self原创 2022-05-24 22:49:26 · 616 阅读 · 0 评论 -
优化算法
剃度下降的两个关键问题引入对于一个模型而言,它的好坏我们会用一个损失函数来衡量,模型效果越好i,其对应的损失函数值就越小,所以这也确定了我们优化模型的基本思想:找到一组使得损失函数最小的权重值。也就是求极值问题,在数学中,我们求极值会先对函数求导,再令导数等于零来求极值。但是回顾上篇文章中的三个函数,不难发现对其求导数,会显得过于复杂。这时候我们就会用梯度下降来迭代出我们的最优参数。两个问题1 如何确定梯度向量的大小和方向梯度向量:多元函数上,每一个权重w的偏导数组成的向量,大小就是,当原创 2022-05-21 06:00:00 · 212 阅读 · 0 评论 -
torch.nn.Linear实现单层回归网络的正向传播
反向传播:往前回溯,计算初始节点的梯度值正向传播:从输入到输出torch.nn.Linear: 代表线性的输出层,z = wximport torchX = torch.tensor([[1,0],[1,1],[0,1],[0,0]],dtype=torch.float32)torch.random.manual_seed(22) # 人为设置随机数种子,固定w,b值# 实例化一个 outputoutput = torch.nn.Linear(2,1)"""上一层的神经元个原创 2022-05-13 18:00:00 · 501 阅读 · 0 评论 -
神经网络的损失函数
基本概念基于上次已经跑通的神经网络,加上一个让神经网络进行学习的过程。模型训练的目标(线性回归为例):求解一组最适合的权重向量w,使得神经网络的输出和真实结果尽量接近损失函数:衡量真实值与预测结果的差异,评价模型学习过程中产生的损失的函数,在数学上,表示为以需要求解的权重向量w为自变量的函数L(W)。我们希望函数L越小越好,也就是找到一个让L最小的w值,也就是求极值问题(求导)。求解过程:1 拉 格朗日变换转成凸函数 2 确定合适的优化算法常见的损失函数:回归神经网络误差平方和sse原创 2022-05-19 18:15:18 · 1402 阅读 · 0 评论 -
从零实现深度神经网络的正向传播
500个数据,20个特征,标签为3分类,网络架构:第一层13个神经元,第二层8个,第三层输出第一层激活函数relu,第二层 。原创 2022-05-17 17:30:00 · 293 阅读 · 0 评论 -
多层网络构建笔记
0=w1x1 + w2x2 + b 可以模拟空间中任意一条直线,然后用这条直线来进行分类这条直线可以写成0=wX,对于一个任意的x,如果wX 大于 零,则直线是上移的状态,x属于直线上方的一类,如果wX 小于零,则x属于直线下方的一类。import torchX = torch.tensor([[1, 0, 0], [1, 1, 0], [1, 0, 1], [1, 1, 1]], dtype=torch.float32)def logitic(X): torch.random原创 2022-05-16 15:14:42 · 534 阅读 · 0 评论