- 博客(13)
- 收藏
- 关注
原创 RNN(循环神经网络)
我们生活中的很多信息都是连续的,而BP乃至CNN模型本身接收的信息是单一的,它能处理多组单一信息,却不能将那些信息联系起来。强如CNN在处理连续数据时也只能自认不如,而我们生活中对连续数据处理的需求又是必不可少的。现在市面上的人工智能模型,在回答人们提出的问题时,也往往能结合上下文进行回答。为了能够处理这种连续数据,有了循环神经网络模型,即RNN。
2025-03-04 20:08:17
368
原创 深度学习--卷积
而我们的参数大小都是不能改变的,这时候我们就可以用填充输入值的方法,为了不影响参数的大小,我们将参数填充的部分全部设为0,这样就得到了一个形状更大但数值不变的输入值了。处理这组3通道数据,我们要用3个卷积核,即3通道卷积核,我们用3个2*2的卷积核处理。我们第一步数据是单通道的,所以卷积核也是单通道的,但是由于我们想要提取多组特征,就选择了多个单通道卷积核的卷积层得到多通道的输出值,为处理这组多通道的输入值,我们要相对的用同通道的卷积核,这里的卷积核也是在卷积层中的,它的数量将决定处理后的数据的通道数。
2025-02-08 12:40:26
740
原创 深度学习--函数
一、首先最主要的一点,线性层中权重的维度和现实是反着的。(注意是右乘,x是数据,是本身已知的,传入数据是后进的,所以是数据乘以参数,为右乘)而我们用到的线性相乘公式是y = w*x +b,是左乘。NLLLoss损失函数是计算多分类问题的损失函数,它与LogSoftmax激活函数连用,以LogSoftmax计算得到的结果作为计算参数,通过接收另一个参数真实标签(每一组结果中想要预测的那个结果的索引(下标),有几组数据真实标签里的数据就有几个,范围是(0, C-1))来计算预测值与实际值之间的误差情况。
2025-01-24 19:02:51
1060
原创 BP实战--测试手写数字
因为得到的是((1,10))格式的,这里我们用[0]得到(1,10)的数据,再转化为numpy,将其中的数据变为列表中的值,将这个列表赋给一个变量,我们将用这个变量找预测值。但是我们的图片数据是三维的,其中有我们不需要的有关图像颜色的通道的维度,我们要将其去掉。做完主类中的定义,我们就要准备输入层的数据了,这里我们的数据是MNIST类型的图片,我们先定义好对图片数据的预处理,用torchvision.transforms.Compose()执行,先将数据转为tensor类型,再进行差值和均值的运算。
2024-11-30 14:43:22
1009
原创 用pytorch对BP神经网络的代码进行类封装
我们已经完成了用python基础的numpy模块进行BP神经网络的学习,现在我们将用一个功能强大的模块:pytorch,我们之前也用pytorch完成过一些与梯度下降有关的学习,但是碍于那些模型不够复杂的缘故,pytorch并未与numpy拉开太大的差距。有了这些功能强大的模块和方法,我们之前的代码完全可以放弃自己设计数学逻辑了,我们可以将这些交给模块,我们只需要在需要的地方调用这些模块的方法就行。它有两个方法,一个是zero_grad(),用于清空梯度,一个是step(),用于更新梯度。
2024-11-19 19:53:16
1084
原创 使用纯python封装成类的BP
每两个层之间用特定的权重w和同一个激活函数连接,我们令输入层输入的数据为x0,输入层到隐藏层连接的权重为w0,得到的存放在隐藏层的临时值为x1,隐藏层到输出层连接的权重为w1,预测值为ÿ,激活函数是sigmoid函数。到预测值出来,正向传播可以说已经做好了,这里可以得到预测值ÿ,在定义一个损失函数,为了方便求导,设置为Loss = 1/2 * ( y - ÿ ) ^ 2,这样就可以用损失函数开始反向传播,反向传播就是反复向上求导,得到权值(和偏置)的梯度(即Loss关于其的导数)。
2024-11-19 17:07:22
471
原创 深度学习--BP神经网络
然后就是激活函数的作用方式,接收加权和,再预测输出。由于我们有隐藏层和输出层两个包含激活函数的分层,所以我们要执行两次这样的过程,与之对应的就是要有两个w,还需要在隐藏层设置一个存放第一次用激活函数得到的值的变量。因此,我们不妨设置输入层,隐藏层,输出层的值为x0,x1,x2,而连接输入层和隐藏层的为w0,连接隐藏层和输出层的为w1。根据图片,我们可以得到:x1 = f1 (w0 * x0) ,x2 = f2 ( w1 * x1 ) ÿ = f2 ( w1 * f1 ( w0 * x0 ) )
2024-11-16 20:30:32
559
原创 单层单变量和多变量梯度更新
我们已知x和y,去求预测值,我们要先想好权重w的形状。比如这里,x的结构是 2 * 1,y 的结构是4 * 1,根据矩阵相乘的原则,我们可以知道 (4 * 2) * ( 2 * 1 ) = 4 * 1,因此可以知道,w的形状是4 * 2,我们假设好w,再将多变量的x,y,w代入就行。学习了前面的知识后,我们理解了感知机的工作原理是同时进行用损失函数调整权重的值和用激活函数接收权重与x的乘积组成的集合(加权值)此类连续的线性组合输出离散的非线性的过程。有了损失值的梯度,我们就可以更新权重了。
2024-11-16 17:15:19
251
原创 深度学习-感知机
ReLU是一种非常简单且高效的激活函数,广泛应用于深度学习模型,尤其是在隐藏层中。它可以避免梯度消失问题,加速训练过程,但也有一些缺点,如死神经元问题。为了解决这些问题,出现了Leaky ReLUPReLUELU等改进版激活函数,它们在不同场景下可能比标准的 ReLU 更有效。ReLU 的优势在于其简单性和高效性,使得它成为现代神经网络的首选激活函数。
2024-11-16 16:04:11
1904
原创 深度学习--利用梯度下降法进行多变量的二分类(感知机)
我们先来说一下什么是二分类,二分类指的是将结果分为两个互斥的类别,通常用来表示问题的两种可能。
2024-11-15 23:23:23
915
原创 利用梯度下降法进行多变量线性回归
wn *xn,我们可以发现,这个公式就是我们想要的多变量变单变量的公式。因为从矩阵的角度去考虑,用行向量乘以列向量相当于(1 *n) * (n * 1) = 1 * 1,这样得到的结果仍是一个一维的标量,与点积的结果是相同的,而一旦用列向量乘以行向量,就成了(n * 1) * (1 * n),得到的结果就成了一个n * n 的矩阵,这与点积结果不符,便不适用于这里的情况。我们要想最后得到好看的1 * 11结构,y要设置成1*11结构,我们在与w(1*2)结构相乘时,要把x放在后面,并且转制,(
2024-11-15 18:09:24
552
原创 python可视化工具matplotlib(1)
为了方便深度学习的学习过程,学习一下python的可视化工具是很有必要的我们一般不直接导入一整个matplotlib整个模块,而是调用它的一个分模块pyplot运行结果:运行结果:plt.figure(num = 2, figsize =(5,5)) 可以将编号改为2,将长宽改为(5,5)
2024-11-12 23:41:32
761
原创 深度学习-3 梯度下降
然后我们对损失函数进行求导,ΔLoss/Δw = 1/n[(wxi-yi)xi]从1到n的累加和,求导按X^2来的话,就等于X*X',因为这里的X是wx - y,未知量是w,所以w' = x,又因为从1到n,x的值都是不一样的,所以要乘以xi,这里得到的是导数模型下的从1到n的代数和,所以要得到导数,要进行取平均值,所以要乘以1/n。其次我们可以求导数,y' = Δy/Δx = 2x,令y' = 0,可以得到x = 0,带入y = x^2,得到y = 0。梯度下降过程更新的是未知的那个量。
2024-11-09 18:36:34
951
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人