- 博客(83)
- 收藏
- 关注
原创 Understanding Deep Learning 第三章 Shallow neural networks
当一层中的每个变量都连接到下一层中的每个变量时,我们称之为全连接网络。对于每个输出,多面体是相同的,但是它们包含的线性函数可能不同。这些功能的四个“连接点”(在垂直虚线处)被限制在相同的位置,因为它们共享相同的隐藏单元,但斜率和整体高度可能不同。)的网络处理,每个隐藏单元的输入是两个输入的线性函数,对应一个有向平面。普遍逼近定理证明,只要有足够的隐藏单元,就存在一个浅层神经网络,它可以将定义在。我们一直在讨论一个有一个输入,一个输出和三个隐藏单元的神经网络。随着隐藏单元的增加,模型可以逼近更复杂的函数。
2025-02-15 14:39:22
860
原创 PyTorch深度学习实践【刘二大人】之卷积神经网络
GoogLeNet的Inception模块,思路就是我们不知道多大的卷积核更好,我们就多选择几种卷积核然后concatenate进行沿通道拼接。网络中全部用的线形层串行连接起来,我们叫做全连接网络。输入与输出任意两节点间都有权重,这样的线形层叫做全连接层。3通道的图像,与3个卷积核做内积得到3个新的3*3矩阵,并对应位置相加。在卷积层数过多时,会出现梯度消失的情况,需要用残差网络来解决这个问题。卷积神经网络的基本特征,先特征提取再进行分类。下面是此模型的主要代码。
2025-01-18 13:57:35
444
原创 PyTorch深度学习实践【刘二大人】之多分类问题
这个公式就能满足两个条件,每个可能输出的概率值都为正,其次所有概率加起来为1。多分类问题,最后用softmax层计算每个分类的值。相加求和,可以满足概率相加为1。zi是每种可能的概率值,分子。确保概率为正,分母把每个。
2025-01-13 15:24:19
340
原创 PyTorch深度学习实践【刘二大人】之加载数据集
只用一个样本会得到比较好的随机性,会帮助跨越鞍点。用全部样本计算速度会大大提升。深度学习中我们会使用mini-batch来均衡性能上时间上的需求。Iteration定义:每次训练使用batch-size的次数,即总样本数/batch-size。在梯度下降中有时用全部的数据,有时只用一个样本也称随机梯度下降。batch-size定义:每次训练时所用的样本数量。epoch定义:所有样本都参与了训练。batch-size为2并且打乱顺序。
2025-01-12 21:32:41
237
原创 PyTorch深度学习实践【刘二大人】之Logistic回归
下图是二分类的损失函数,本质上是交叉熵公式,用途是度量预测分布与真实分布之间的差异,最终预测值越大越好,说明越接近,但loss有负号,所以loss越小越好。下图就是一个经典的手写数字分类问题,判断数字是0到9的哪一个分类,要用回归的方式估算每个类别的概率为多少,最终选择概率最大的值。根据我们数据,(1,0)(2,0)(3,1),我们推断在2.5小时就为0.5,就是图像的交点。前几节课的线性回归输出值为实数,我们要求概率,所以要把输出值映射为0到1的区间,就选取了。
2025-01-08 22:11:40
384
原创 PyTorch深度学习实践【刘二大人】之线性回归
前几节课中,我们都是手动去求导数,在pytorch中主要先构建计算图,梯度什么的会自动求出。另外插一句,本来loss求出也是一个列向量,但因为要求loss是一个标量,所以loss要进行求和,可以选择是否求均值。我们模型为y=w*x+b,w与b为了能与3行1列的矩阵相乘也变为3行1列。则在初始化时x_data与y_data值也是3行1列的矩阵。用pytorch写深度神经网路,主要分为以下四步。在numpy中做加法存在广播机制,维度不同的。
2025-01-07 22:00:17
145
原创 PyTorch深度学习实践【刘二大人】之反向传播
下面是f=x*w具体的反向传播过程,L对z的偏导是上一步传递过来的不用管,L对x和L对w的偏导都是链式法则,带入进行运算,如果x前面还有值就继续向前传递。但在网络比较复杂时候,进行一个个求导运算已经太过于复杂,于是我们考虑能否把网络看成一幅图,在图上传播梯度,最终根据链式法则求出梯度。对于线性模型进行反向传播,求出L对w的偏导后,用梯度下降算法对权重进行更新。下图我们可以发现经过化简,无论多少层,都可以看成wx+b,这说明线性模型具有局限性。在上一节课中,我们知道了要用损失对权重w求导,来更新权重。
2025-01-04 22:22:24
251
原创 Understanding Deep Learning 第二章 Supervised learning
相反,一个非常有表现力的模型可能描述训练数据的统计特性,这些特性是非典型的,并导致不寻常的预测。寻找使损失最小的参数的过程称为模型拟合、训练或学习。和斜率ф1),因此我们可以计算每个值组合的损失,并将损失函数可视化为一个曲面。定义了一个可能的投入产出关系族(所有可能的直线),参数的选择决定了这个族的成员(特定的直线)。更低的损失意味着更好的匹配。线性回归有一个明显的缺点,它只能将输入和输出之间的关系描述为一条直线。章)同样具有表现力,但可以用更少的参数描述复杂的函数,并且在实践中工作得更好。
2025-01-04 16:53:59
747
原创 Understanding Deep Learning第一章Introduction
然而,这些行动以一种不确定的方式改变了系统的状态,对于任何行动的选择,对手玩家可能会做出许多不同的反应。机器人可以在给定的时间内执行有限数量的动作(移动不同的关节),这些动作会改变世界的状态(它的姿势)。中的模型接收包含餐厅评论的文本字符串作为输入,并预测该评论是正面的还是负面的。它可以是离散的或连续的,低维的或高维的,长度恒定的或可变的。为两张真实图像找到这些变量,插值它们的值,然后使用这些中间变量来创建新图像,我们可以生成中间结果,这些中间结果在视觉上是可信的,并且混合了两张原始图像的特征。
2025-01-03 22:17:13
914
原创 PyTorch深度学习实践【刘二大人】之梯度下降算法
梯度下降更新是以整个的所有数据的平均损失,随机梯度下降是从n个数据从里面随机选一个,这是更新公式变为了拿单个样本得损失进行更新。随机梯度下降只用一个样本,而所有样本都具有噪声,这样就引入了随机噪声,这样即使陷入鞍点,随机噪声也可能把我们推动,在训练过程中就有可能跨越鞍点像最优值迈进。梯度下降算法的目的是寻找全局花费的最小值,首先要确定初始点往左还是往右下降,要根据梯度的定义,梯度就是目标函数对权重求导。,α为学习率,一般学习率要取比较小,若学习率较大w移动的过多,就可能错过最小梯度点。
2025-01-02 22:57:42
314
原创 PyTorch深度学习实践【刘二大人】之线性模型
在一般机器学习任务中,先拿一个线性模型看是否有效,本次数据可以轻易看出是属于线性模型,选取y=x*w,此时问题在于权重w取多少,在机器学习中我们都是随机猜一个随机值,然后判断与数据集之间的误差。对于机器学习来说,模型经过训练集的训练,获得新的输入能得到相应预测结果,得到的结果与测试集相对比,进而再调整模型。值得注意的是,损失函数是针对一个样本的,而对于整个的训练集要用下面的公式,先把每个样本损失都加起来,再除以整个个数N。问如果学习4个小时,会得到多少分?在深度学习时,画的表x轴为训练轮数。
2025-01-01 21:18:02
172
原创 PyTorch快速入门教程【小土堆】之损失函数与反向传播
2. 为我们更新输出提供一定的依据(反向传播)下方代码是loss函数在模型中如何使用。上方代码举例了几种loss函数的使用。1,计算实际输出和目标之间的差距。
2024-12-30 19:51:50
654
原创 PyTorch快速入门教程【小土堆】之Sequential使用和小实战
【代码】PyTorch快速入门教程【小土堆】之Sequential使用和小实战。
2024-12-30 19:11:53
406
原创 PyTorch快速入门教程【小土堆】之非线性激活
非线性变换主要目的是向网络当中引入非线性特征,非线性特征越多才能训练出符合各种曲线,符合更多特征的模型,如果都是直接表现的话泛化能力不好。
2024-12-30 16:50:54
509
原创 PyTorch快速入门教程【小土堆】之nn.Module的使用
nn为神经网路Neural Network的缩写,本次实现了一个最简单的把输入值加1的模型。
2024-12-30 13:44:11
336
原创 PyTorch快速入门教程【小土堆】之DataLoader的使用
dataset数据集,相当于一副扑克,dataloader数据加载器相当于我们的手,选择摸几张牌,怎么摸牌。
2024-12-29 22:10:38
293
原创 PyTorch快速入门教程【小土堆】之Transforms的使用
本文中的transforms指的并不是那个知名的模型,而是Transforms.py所在的一个包,相当于一个工具箱,可以被调用,里面有Resize,PILToTensor等方法,可直接对图片进行操作。
2024-12-29 19:58:12
283
原创 PyTorch快速入门教程【小土堆】之TensorBoard的使用
tensorboard的用法,在左图显示2974步时输入的图像,右图是训练过程中loss的变化。
2024-12-29 19:08:55
188
原创 六大基础深度神经网络之RNN
x0结果输出时,不仅会直接输出h0,还有一部分会与x1进行融合从而输出h1,x2时也同理,这样网络就会考虑到时间的前后信息。但如果输入信息很多,到x10000,那么x0的信息还需要考虑吗,有可能就根本不重要,所以就引入了LSTM(长短时记忆网络)C为控制参数决定什么样的信息会被保留什么样的会被遗忘。⊗⊕是门,是一种让信息选择式通过的方法。
2024-12-27 10:46:10
420
原创 六大基础深度神经网络之CNN
进行内积计算,就是对应位置相乘,即3*0+3*1+2*2+0*2+0*2+1*0+3*0+1*1+2*2=12,然后每次把3*3的区域与权值相乘,最终得到绿色的矩阵。W2、 H2表示输出特征图的宽度、长度;下图从一张32*32*3的图像中提取一张5*5*3的小区域,第一步将左上角三乘三的区域。池化目的是减少特征图的信息量,下图为最大池化,选取2*2的过滤器步长为2,选取每个2*2区域内最大的数。常见图像是彩色的就是三通道,上图中的32*32*3中的3也就说明是彩色图像,若为1则是黑白图像。
2024-12-26 18:00:45
417
原创 CUDA和cuDNN安装配置
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
2022-11-15 15:43:41
8545
2
原创 卷积神经网络实践-猫狗分类
近年来,深度学习理论和技术都得到了迅速的发展,并且受到了越来越多的研究者的关注,深度学习技术在图像识别领域具有广泛的应用。
2022-10-25 20:05:34
4309
3
原创 L1-019 谁先倒
PTA | 程序设计类实验辅助教学平台两种方法差不多#include <iostream>using namespace std;int main() { int A, B, N, a1, a2, b1, b2; cin >> A >> B >> N; //甲乙酒量 int a = A, b = B; //a和b用来记录A与B何时倒 while (N--) { cin >> a1 >> a2 >>
2022-04-21 21:04:37
224
原创 L1-043 阅览室
PTA | 程序设计类实验辅助教学平台#include <iostream>using namespace std;struct node { int startTime; int st;//0表示未被借出,1表示被借出。} book[1001];int getTime(int hour, int minute) { return hour * 60 + minute;}int main() { int id, hour, minute, days; char.
2022-04-21 19:58:49
394
原创 L1-059 敲笨钟
PTA | 程序设计类实验辅助教学平台一开始我不明白,怎么把一句话分割输入,并且判断下面是先输入在判断,如果逗号前面时候ong并且.前面也是ong那就是押韵的并且根据空格判断第几个单词#include <iostream>using namespace std;typedef long long ll;const int maxn = 1e5 + 10;string s;int main() { int n; cin >> n; getcha..
2022-04-21 17:17:20
401
原创 L1-025 正整数A+B
PTA | 程序设计类实验辅助教学平台按模块写,就不容易写错了#include <iostream>using namespace std;int n1, n2;bool f1 = true, f2 = true, f3 = true, f4 = true;int main() { string a, b; cin >> a; getchar(); getline(cin, b); //b中可能包含空格,所以用getline进行输入 for (int .
2022-04-21 16:46:59
224
原创 L1-020 帅到没朋友
#include <iostream>using namespace std;int a[100000];int main() { int n; cin >> n; int x, id; while(n--) { cin >> x; if (x >= 2) { while(x--) { cin >> id; a[id] = 1; } } else cin >> id; }...
2022-04-21 16:29:07
136
原创 L1-009 N个数求和
PTA | 程序设计类实验辅助教学平台#include <iostream>using namespace std;int gcd(int a, int b) { return a % b == 0 ? b : gcd(b, a % b);}int a[105] , b[105];int main() { int n, i = 0; scanf("%d", &n); scanf("%d/%d", &a[i], &b[i]); int .
2022-04-19 20:49:24
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人