随笔分类 -  从头学pytorch

摘要:DenseNet "论文传送门" ,这篇论文是CVPR 2017的最佳论文. "resnet一文" 里说了,resnet是具有里程碑意义的.densenet就是受resnet的启发提出的模型. resnet中是把不同层的feature map相应元素的值直接相加.而densenet是将channel 阅读全文
posted @ 2020-02-06 18:44 core! 阅读(7507) 评论(0) 推荐(2) 编辑
摘要:残差网络ResNet resnet是何凯明大神在2015年提出的.并且获得了当年的ImageNet比赛的冠军. 残差网络具有里程碑的意义,为以后的网络设计提出了一个新的思路. googlenet的思路是加宽每一个layer,resnet的思路是加深layer. 论文地址: 论文里指出,随着网络深度的 阅读全文
posted @ 2020-01-17 16:57 core! 阅读(4931) 评论(1) 推荐(0) 编辑
摘要:批量归一化 论文地址: 批量归一化基本上是现在模型的标配了 . 说实在的,到今天我也没搞明白batch normalize能够使得模型训练更稳定的底层原因,要彻底搞清楚,涉及到很多凸优化的理论,需要非常扎实的数学基础才行. 目前为止,我理解的批量归一化即把每一层输入的特征,统一变换到统一的尺度上来, 阅读全文
posted @ 2020-01-16 16:38 core! 阅读(3790) 评论(0) 推荐(2) 编辑
摘要:GoogLeNet GoogLeNet和vgg分别是2014的ImageNet挑战赛的冠亚军.GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNe 阅读全文
posted @ 2020-01-15 13:48 core! 阅读(798) 评论(0) 推荐(2) 编辑
摘要:网络中的网络NIN 之前介绍的LeNet,AlexNet,VGG设计思路上的共同之处,是加宽(增加卷积层的输出的channel数量)和加深(增加卷积层的数量),再接全连接层做分类. NIN提出了一个不同的思路,串联多个由卷积层和'全连接层'(1x1卷积)构成的小网络来构建一个深层网络. 论文地址: 阅读全文
posted @ 2020-01-14 14:32 core! 阅读(1446) 评论(0) 推荐(1) 编辑
摘要:VGG AlexNet在Lenet的基础上增加了几个卷积层,改变了卷积核大小,每一层输出通道数目等,并且取得了很好的效果.但是并没有提出一个简单有效的思路. VGG做到了这一点,提出了可以通过重复使⽤简单的基础块来构建深度学习模型的思路. 论文地址: vgg的结构如下所示: 上图给出了不同层数的vg 阅读全文
posted @ 2020-01-10 22:54 core! 阅读(1560) 评论(0) 推荐(0) 编辑
摘要:AlexNet AlexNet是2012年提出的一个模型,并且赢得了ImageNet图像识别挑战赛的冠军.首次证明了由计算机自动学习到的特征可以超越手工设计的特征,对计算机视觉的研究有着极其重要的意义. AlexNet的设计思路和LeNet是非常类似的.不同点主要有以下几点: 激活函数由sigmoi 阅读全文
posted @ 2020-01-08 18:29 core! 阅读(1342) 评论(0) 推荐(0) 编辑
摘要:卷积神经网络 在之前的文章里,对28 X 28的图像,我们是通过把它展开为长度为784的一维向量,然后送进全连接层,训练出一个分类模型.这样做主要有两个问题 1. 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。 2. 对于大尺寸的输入图像,使用全连接层容易造成模型 阅读全文
posted @ 2020-01-07 15:33 core! 阅读(862) 评论(0) 推荐(0) 编辑
摘要:GPU计算 默认情况下,pytorch将数据保存在内存,而不是显存. 查看显卡信息 我的机器输出如下: 单卡,gtx 1050,4g显存. 查看gpu是否可用 查看gpu数量 查看当前gpu号 查看设备名 把tensor复制到显存 使用 可以将CPU上的 转换(复制)到GPU上。如果有多块GPU,我 阅读全文
posted @ 2020-01-03 17:10 core! 阅读(26183) 评论(0) 推荐(7) 编辑
摘要:模型读取和存储 总结下来,就是几个函数 1. torch.load()/torch.save() 通过python的pickle完成序列化与反序列化.完成内存磁盘转换. 2. Module.state_dict()/Module.load_state_dict() state_dict()获取模型参 阅读全文
posted @ 2020-01-03 16:01 core! 阅读(6633) 评论(0) 推荐(1) 编辑
摘要:自定义layer 一文里说了怎么写自定义的模型.本篇说怎么自定义层. 分两种: 不含模型参数的layer 含模型参数的layer 核心都一样,自定义一个继承自 ,在类的forward函数里实现该layer的计算,不同的是,带参数的layer需要用到 不含模型参数的layer 直接继承nn.Modul 阅读全文
posted @ 2020-01-03 14:43 core! 阅读(3657) 评论(0) 推荐(2) 编辑
摘要:模型参数的访问初始化和共享 参数访问 参数访问:通过下述两个方法.这两个方法是在nn.Module类中实现的.继承自该类的子类也有相同方法. .parameters() .named_parameters() 输出 可见返回的名字自动加上了层数的索引作为前缀。 我们再来访问 中单层的参数。对于使用 阅读全文
posted @ 2020-01-02 17:56 core! 阅读(4120) 评论(0) 推荐(1) 编辑
摘要:模型构造 nn.Module nn.Module是pytorch中提供的一个类,是所有神经网络模块的基类.我们自定义的模块要继承这个基类. 输出如下: Module的子类 torch中还提供了一些其他的类,方便我们构造模型. 这些类也都是继承自nn.Module. Sequential Module 阅读全文
posted @ 2020-01-02 14:27 core! 阅读(1699) 评论(0) 推荐(2) 编辑
摘要:深度学习中的梯度消失和爆炸 详细分析参考: 简单的一句话总结就是: 这二者本质上是同一个问题,在反向传播时,需要求梯度.根据链式求导法则,所以相当于各层的偏导数连乘,由于激活函数的存在,有些激活函数的偏导数一直小于1或者大于1,那么偏导数连乘以后,就会造成梯度过小或过大.从而使得参数变化很小或者参数 阅读全文
posted @ 2019-12-31 17:30 core! 阅读(856) 评论(0) 推荐(0) 编辑
摘要:"上一篇" 讲了防止过拟合的一种方式,权重衰减,也即在loss上加上一部分$\frac{\lambda}{2n} \|\boldsymbol{w}\|^2$,从而使得w不至于过大,即不过分偏向某个特征. 这一篇介绍另一种防止过拟合的方法,dropout,即丢弃某些神经元的输出.由于每次训练的过程里, 阅读全文
posted @ 2019-12-31 15:38 core! 阅读(9907) 评论(0) 推荐(2) 编辑
摘要:深度学习中常常会存在过拟合现象,比如当训练数据过少时,训练得到的模型很可能在训练集上表现非常好,但是在测试集上表现不好. 应对过拟合,可以通过数据增强,增大训练集数量.我们这里先不介绍数据增强,先从模型训练的角度介绍常用的应对过拟合的方法. 权重衰减 权重衰减等价于 $L_2$ 范数正则化(regu 阅读全文
posted @ 2019-12-28 20:45 core! 阅读(3443) 评论(0) 推荐(2) 编辑
摘要:多层感知机 上图所示的多层感知机中,输入和输出个数分别为4和3,中间的隐藏层中包含了5个隐藏单元(hidden unit)。由于输入层不涉及计算,图3.3中的多层感知机的层数为2。由图3.3可见,隐藏层中的神经元和输入层中各个输入完全连接,输出层中的神经元和隐藏层中的各个神经元也完全连接。因此,多层 阅读全文
posted @ 2019-12-26 18:51 core! 阅读(2713) 评论(2) 推荐(2) 编辑
摘要:FashionMNIST数据集共70000个样本,60000个train,10000个test.共计10种类别. 通过如下方式下载. softmax从零实现 数据加载 初始化模型参数 模型定义 损失函数定义 优化器定义 训练 数据加载 初始化模型参数 模型定义 记忆要点:沿着dim方向.行为维度0, 阅读全文
posted @ 2019-12-26 13:42 core! 阅读(2746) 评论(1) 推荐(3) 编辑
摘要:前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中,模型输出可以是一个像图像类别这样的离散值。对于这样的离散值预测问题,我们可以使用诸如softmax回归在内的分类模型。和线性回归不同,softmax回归的输出单元从一个变成了多个,且引入了softmax运算使输出更适合离散值的预测和训 阅读全文
posted @ 2019-12-24 21:32 core! 阅读(1287) 评论(0) 推荐(1) 编辑
摘要:关于什么是线性回归,不多做介绍了.可以参考我以前的博客 实现线性回归 分为以下几个部分: 生成数据集 读取数据 初始化模型参数 定义模型 定义损失函数 定义优化算法 训练模型 生成数据集 我们构造一个简单的人工训练数据集,它可以使我们能够直观比较学到的参数和真实的模型参数的区别。设训练数据集样本数为 阅读全文
posted @ 2019-12-23 15:30 core! 阅读(2027) 评论(0) 推荐(4) 编辑