自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 59、深度学习-自学之路-自己搭建深度学习框架-20、垃圾邮件识别程序

id=None):else:else:if (cnt!= 0):returnelse:else:return newreturn outif (zero):else:import sysw2i = {}

2025-03-04 01:12:22 706

原创 58、深度学习-自学之路-自己搭建深度学习框架-19、RNN神经网络梯度消失和爆炸的原因(从公式推导方向来说明),通过RNN的前向传播和反向传播公式来理解。

一、RNN神经网络的前向传播图如下:时间步 t=1:↑ (W_h)h₀ (初始隐藏状态)时间步 t=2:↑ (W_h)h₁时间步 t=3:↑ (W_h)h₂。

2025-03-01 23:26:44 1376 4

原创 57、深度学习-自学之路-自己搭建深度学习框架-18、RNN神经网络的简介

一、RNN神经网络的使用场景:自然语言处理(NLP):文本生成(如生成文章、诗歌)。机器翻译(如将英文翻译成中文)。情感分析(如判断评论的正负面)。语音识别(将语音转换为文本时间序列预测:销售量预测。天气预测。股票价格预测。序列标注:命名实体识别(如从文本中提取人名、地名)。词性标注(如标注名词、动词)。视频分析:视频帧分类。动作识别。音乐生成:生成旋律或和弦序列。捕捉时间依赖关系:RNN 能够处理序列数据中的时间依赖关系,适合处理具有时间顺序的任务。共享参数:RNN 在每个时间步共享参数,减少了模型的参数

2025-03-01 20:30:32 748 1

原创 56、深度学习-自学之路-自己搭建深度学习框架-17、关于为什么LSTM可以解决RNN的梯度爆炸和梯度消失的问题的解析。

不仅仅解释了为什么,还把公式的推导也给了出来。还可以看一下他的专辑内容,其中有RNN ,LSTM , GRU的详细解释。"大白话讲解LSTM长短期记忆网络 如何缓解梯度消失,手把手公式推导反向传播”我的话太苍白,你们可以去哔哩哔哩上搜索一个。

2025-02-28 21:37:51 165

原创 55、深度学习-自学之路-自己搭建深度学习框架-16、使用LSTM解决RNN梯度消失和梯度爆炸的问题,重写莎士比亚风格文章。在我的资源里面有对应的shakesper.txt的训练集下载

global min_loss # 声明 min_loss 是全局变量。进程已结束,退出代码为 0。

2025-02-27 17:27:40 1408

原创 54、深度学习-自学之路-自己搭建深度学习框架-15、解释梯度消失和梯度爆炸的问题。

'''Gradients[5. 5.][25. 25.]'''

2025-02-27 10:44:28 2576

原创 53、深度学习-自学之路-自己搭建深度学习框架-14、使用自己的架构搭建一个通过学习模仿莎士比亚风格的2000次的文章。并且在关键层配有详细解释。在我的资源里面有对应的shakesper.txt的训练

new_hidden:当前时间步的隐藏状态,形状为 (batch_size, n_hidden)。#作用:词汇表的大小决定了嵌入矩阵的行数。self.w_hh = Linear(n_hidden, n_hidden) # self.w_hh:隐藏状态到隐藏状态的线性变换层,形状为 (n_hidden, n_hidden)。self.w_ho = Linear(n_hidden, n_output) # self.w_ho:隐藏状态到输出的线性变换层,形状为 (n_hidden, n_output)。

2025-02-26 10:30:36 1225 2

原创 52、深度学习-自学之路-自己搭建深度学习框架-13、对话预测功能,使用我们自己建的架构重写RNN预测网络,程序的详细解读。

new_hidden:当前时间步的隐藏状态,形状为 (batch_size, n_hidden)。#作用:词汇表的大小决定了嵌入矩阵的行数。self.w_hh = Linear(n_hidden, n_hidden) #self.w_hh:隐藏状态到隐藏状态的线性变换层,形状为 (n_hidden, n_hidden)。self.w_ho = Linear(n_hidden, n_output) #self.w_ho:隐藏状态到输出的线性变换层,形状为 (n_hidden, n_output)。

2025-02-25 00:07:37 595

原创 51、深度学习-自学之路-自己搭建深度学习框架-12、使用我们自己建的架构重写RNN预测网络

总结:虽然预测值和真实值有差距,但是在整体的句式上是正确的。填写的次是一个正确的词,不想以前那么的混乱了。

2025-02-24 20:42:30 1082

原创 50、深度学习-自学之路-自己搭建深度学习框架-11、添加RNN递归神经网络层为了浮现RNN的神经网络使用框架。

id=None):else:else:if (cnt!= 0):else:else:return newreturn outif (zero):# Predict# Compare# Learn''''''

2025-02-24 20:29:55 680

原创 49、深度学习-自学之路-自己搭建深度学习框架-10、添加交叉熵为了浮现RNN的神经网络使用框架。

id=None):else:else:if (cnt!= 0):else:else:return newif (zero):# Predict# Compare# Learn''''''

2025-02-24 20:23:40 482

原创 48、深度学习-自学之路-自己搭建深度学习框架-9、添加嵌入层为了浮现RNN的神经网络使用框架。

''' 2 he 出现了2次,所以对应的行时2 2 2 2 2。

2025-02-24 20:21:18 975 2

原创 47、深度学习-自学之路-自己搭建深度学习框架-8、添加损失对象、激活函数Tanh,Sigmoid,以及对应的反向梯度传播方法。

id=None):else:else:if (cnt!= 0):else:else:if (zero):# Predict# Compare# Learn。

2025-02-24 13:11:56 557

原创 46、深度学习-自学之路-自己搭建深度学习框架-7、把输入层和隐藏层、权重层都用面向对象进行定义,并对新定义的对象程序部分进行了详细的解析

w.append(Tensor(np.random.rand(2, 3), autograd=True)) 这行代码的主要功能是创建一个形状为 (2, 3) 的随机张量(Tensor),如果不清零,新的梯度 g2 会累加到 p.grad.data 中,即 p.grad.data = g1 + g2。Tensor(np.ones_like(loss.data)):这是一个形状与 loss 相同的张量,所有元素为 1,表示损失对自身的梯度为 1。并将其添加到列表 w 中。这会限制模型的表达能力。

2025-02-24 11:42:48 643

原创 45、深度学习-自学之路-自己搭建深度学习框架-7、把输入层和隐藏层、权重层都用面向对象进行定义

w.append(Tensor(np.random.rand(2, 3), autograd=True)) 这行代码的主要功能是创建一个形状为 (2, 3) 的随机张量(Tensor),return Tensor(self.data.sum(dim), #即 Tensor 对象所存储的 numpy 数组数据)在指定维度 dim 上进行求和操作。并将其添加到列表 w 中。这个随机张量的数据是从均匀分布 [0, 1) 中随机采样得到的,同时开启了自动求导(autograd=True)功能,

2025-02-23 17:09:42 834

原创 44、深度学习-自学之路-自己搭建深度学习框架-6、自动优化,就是把原来的权重更新的部分用面向对象的方式再写一次

Predict# Compare''''''

2025-02-23 17:00:42 422

原创 43、深度学习-自学之路-自己搭建深度学习框架-5、自动梯度计算,重写神经元训练,详细讲解自动梯度下降是怎么下降的。从numpy突然转到Tensor后特别别扭,不知道程序是怎么运行的,特别是自动梯度

w_.grad.data 是权重 w_ 的梯度,0.1 是学习率,通过将权重减去梯度乘以学习率的结果来更新权重。w.append(Tensor(np.random.rand(2, 3), autograd=True)) 这行代码的主要功能是创建一个形状为 (2, 3) 的随机张量(Tensor),这一段是整个程序的核心,是梯度传递的核心内容。切记要把梯度的自动下降的步骤详细的看情况,一定要详细的看。这个是神经网络训练的基础。以下的程序中的w_.grad.data按照上面计算好的梯度值进行权重的更新。

2025-02-23 16:16:33 859

原创 42、深度学习-自学之路-自己搭建深度学习框架-5、自动梯度计算,重写神经元训练

return Tensor(self.data.sum(dim), #即 Tensor 对象所存储的 numpy 数组数据)在指定维度 dim 上进行求和操作。第一个:使用numpy写的神经元训练。第二个:使用张量重写的神经元训练。

2025-02-22 00:21:26 628

原创 41、深度学习-自学之路-自己搭建深度学习框架-5、自动梯度计算,除了加法方法以外,增加了取反的方法、减法、乘法、求和、扩展、矩阵相乘。配有程序的解释,方便理解。

如果当前 Tensor 对象开启了自动求导(self.autograd 为 True),则创建一个新的 Tensor 对象,该对象的 autograd 也为 True,creators 记录为当前对象 self,creation_op 记录为 "expand_" + str(dim),表示这是一个在 dim 维度上的扩展操作。self.data.dot(x.data):使用 numpy 数组的 dot 方法对 self.data 和 x.data 进行矩阵乘法操作,得到矩阵乘法的结果。

2025-02-22 00:06:18 591

原创 40、深度学习-自学之路-自己搭建深度学习框架-4、自动梯度计算,除了加法方法以外,增加了取反的方法。

这段代码实现了一个简单的自动求导系统,核心是 Tensor 类,它模拟了深度学习框架中张量的行为,支持自动求导功能。具体来说,代码通过构建计算图(记录张量之间的操作关系),并利用反向传播算法来计算梯度。在原来的基础上新增加了一个neg函数,取反的函数。下面详细分析代码的各个部分以及最终的输出结果。

2025-02-21 22:33:44 305

原创 39、深度学习-自学之路-自己搭建深度学习框架-3、自动梯度计算改进,并且进行了每一段代码的注释,方便理解程序的运行过程

在 Tensor 类的 __add__ 方法里,当执行 a + b 时,会创建一个新的 Tensor 对象 d,并且把 creators 参数设置为 [a, b],这就表明 a 和 b 是创建 d 的父张量。return True #如果遍历完 self.children 字典后,所有子张量的引用计数都为 0,说明所有子张量的梯度都已经处理完毕,方法返回 True。# 引用计数表示该子张量对当前张量的依赖次数,在反向传播过程中,每处理一次子张量的梯度,引用计数就会减 1。

2025-02-21 18:10:43 670

原创 38、深度学习-自学之路-自己搭建深度学习框架-3、自动梯度计算改进

id=None):else:else:if (cnt!= 0):else:else:d = a + be = b + cf = d + e。

2025-02-21 16:30:55 380

原创 37、深度学习-自学之路-自己搭建深度学习框架-2、自动梯度计算

z.backward(Tensor(np.array([1,1,1,1,1]))):从 z 开始进行反向传播,传入初始梯度 [1, 1, 1, 1, 1]。x.grad 和 y.grad 的输出都会是 [1 1 1 1 1]。self.creation_op = creation_op:记录创建该张量所使用的操作,默认为 None。self.grad = grad:将传入的梯度 grad 赋值给当前张量的 self.grad。self.grad = None:用于存储该张量的梯度,初始化为 None。

2025-02-21 16:29:21 441

原创 36、深度学习-自学之路-自己搭建深度学习框架-1、张量的学习

定义 Tensor 类定义了一个名为 Tensor 的类,它继承自 object,在 Python 3 中,所有类默认继承自 object,# 它将两个实例的 data 属性(即 numpy 数组)进行相加,并将结果封装成一个新的 Tensor 实例返回。# 这里返回 self.data 的 __repr__ 方法的结果,并将其转换为字符串。# 这里返回 self.data 的 __str__ 方法的结果,并将其转换为字符串。# __str__ 方法用于返回对象的字符串表示形式,通常用于用户友好的输出。

2025-02-21 16:27:32 341

原创 35、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,解析RNN的运行原理。同时配有对应的输出解析。还有对应的资料下载。同时和CBOW和Skip-Gram也进行了比较。

词义的处理上有不同的方式我们现在使用的RNN, CBOW,Skip-GramRNN 是一类专门用于处理序列数据的神经网络。与传统的前馈神经网络不同,RNN 引入了循环结构,允许网络在处理当前输入时,能够记住之前的信息。具体来说,RNN 在每个时间步接收输入并生成输出,同时将当前时间步的隐藏状态传递到下一个时间步,使得网络可以对序列中的信息进行建模应用场景CBOW。

2025-02-20 22:54:39 946

原创 34、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,可以从程序中理解RNN的基本思想。

f.close()return idxlayer = {}loss = 0layer = {}# forwardelse:# forwardelse:else:运行结果:''''''

2025-02-20 00:35:56 1378

原创 33、深度学习-自学之路-深入理解-NLP自然语言处理-Skip-Gram的哈夫曼树程序理解,从程序运行的角度来解读Skip-Gram的哈夫曼树的整个过程。可以和32对比看,更好理解。

W2 = np.random.rand(vocab_size, embedding_dim) # 输出层的权重(用于负采样)W1 = np.random.rand(vocab_size, embedding_dim) # 输入层到隐藏层的权重。h = W1[target_index] # 目标单词的嵌入向量。# 获取目标单词和上下文单词的哈夫曼路径。# 遍历目标单词的哈夫曼路径。# 训练Skip-Gram模型。# 创建单词到索引的映射。# 3. 生成训练数据。# 1. 数据预处理。

2025-02-19 20:20:34 794

原创 32、深度学习-自学之路-深入理解-NLP自然语言处理-Skip-Gram的程序理解,从程序运行的角度来解读CBOW的整个过程。最后的解释中有程序一步一步的解释。

示例文本数据# 1. 数据预处理# 统计单词频率# 创建单词到索引的映射# 2. 构建训练数据if j!= i:# 3. 初始化模型参数W1 = np.random.rand(vocab_size, embedding_dim) # 输入层到隐藏层的权重W2 = np.random.rand(embedding_dim, vocab_size) # 隐藏层到输出层的权重print(W1)print(W2)

2025-02-19 19:51:36 673

原创 31、深度学习-自学之路-深入理解-NLP自然语言处理-CBOW的哈夫曼树的程序理解,从程序运行的角度来解读CBOW哈夫曼树的整个过程。最后的解释中有程序一步一步的解释。

假设随机选择的负样本是 ["processing", "and", "machine"],其路径分别是 [1, 0, 0]、[1, 0, 1] 和 [1, 1, 0]。比如我们的有10000个单词,那么我们one-hot的长度就是10000,那么输出的one-hot也是10000,那么在整个计算当中的计算量就非常的庞大。深度总结:我们在30篇的时候已经讲解了最基础的CBOW的模型,那个时候的输入one-hot,输出也是one-hot,输出的激活函数是softmax,# 真实标签(目标单词为1,负样本为0)

2025-02-18 13:46:08 288

原创 30、深度学习-自学之路-深入理解-NLP自然语言处理-CBOW的简单程序理解,从程序运行的角度来解读CBOW的整个过程。这里是一个简单的CBOW模型,还有别的变种,先不细说。日后慢慢理解。

第三个是:这个函数还不能直接用于更大更多输入文本的情况,因为这个程序的计算值还是很多,如果要做很多文本训练的时候,占用的资源会变的很多。index_to_word = {idx: word for word, idx in word_to_index.items()} # 索引到单词的映射。那是因为训练的过程就是训练对应的权重。第四个是:一般来说这种词向量训练会耗费很大的算力,一般的个人是无法承受的。第一个是词向量是什么,在最开始的时候,词向量使用的one-hot词表,这里面表示的是每个词对应的序号。

2025-02-17 23:50:08 793

原创 29、深度学习-自学之路-深入理解-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

这个里面有我对所有的代码的注释:可以帮助我们理解整个程序,这个程序是有问题的,但是整个思路是对的。因为现在只是用这个数据集,训练的时候用的是5个一组的数据,这个就很难受。random 是 Python 的标准库,shuffle 是 random 模块中的一个函数,它会直接修改传入的列表,使其元素顺序随机化。NumPy 是 Python 中用于科学计算的一个重要库,np.array() 是 NumPy 提供的一个函数,这个里面只是给出了一个相关的程序,但是还有很多需要改进的地方,因为没有一个合适的数据集。

2025-02-16 00:40:39 1099

原创 28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示

random.shuffle(input_dataset) 这行代码的主要功能是对 input_dataset 列表中的元素进行随机打乱顺序的操作。random 是 Python 的标准库,shuffle 是 random 模块中的一个函数,它会直接修改传入的列表,使其元素顺序随机化。NumPy 是 Python 中用于科学计算的一个重要库,np.array() 是 NumPy 提供的一个函数,('brilliant', -3.470232426351145), #明亮的,恒成功的。

2025-02-14 19:30:19 1043

原创 27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。

这里提供两个数据集,一个是原始评论数据集《reviews.txt》,以及对应的评论是消极还是积极的数据集《labels.txt》,下面的程序就是找到这两个数据集,并把对应的数据集的内容分别赋值给reviews和labels。比如说:reviews的文件有25000条评论数据,那么着25000条评论数据对应会有很多个单词,我们要把这些单词做成一个词典一样的链表。第2个是把做好这个词典以后,我们把每天评论语中的单词不重复的形式去词典里面查找对应的数字号码。第3个是把所有的评论评判的结果用 1 和 0 来表示。

2025-02-13 19:29:55 1384

原创 26、深度学习-自学之路-NLP自然语言处理-理解加程序,怎么把现实的词翻译给机器识别。

这个运行结果就是代表“the cat sat”这句话。当然对于一个实际的应用来说,这个词向量的长度和词向量可以表达的内容还很少。但是我们已经知道了最基础的NLP的思想了。第一步要转化数据到我们机器可以识别的程序。一、怎么能让机器能够理解我们的语言呢,我们可以利用神经网络干很多的事情,那么我们是不是也可以用神经元做自然语言处理呢,现在很多的实际应用已经说明了这个问题,可以这么做。

2025-02-13 19:07:31 367

原创 25、深度学习-自学之路-卷积神经网络基于MNIST数据集的程序展示

print("x_train[0:1000].reshape(1000,28*28)"+str(x_train[0:1000].reshape(1000,28*28)))#是一个全零的矩阵。layer_1_delta = layer_2_delta.dot(weight_1_2.T)*tanh2deriv(layer_1)#第一层权重误差。(x_train,y_train),(x_test,y_test) = mnist.load_data() #第一次进行Mnist 数据的下载。

2025-02-12 19:30:26 1112

原创 24、深度学习-自学之路-卷积神经网络

一、你怎么理解卷积神经网络呢,我的理解是当你看一个东西的时候,你的眼睛距离图片越近,你看到的东西就越清晰,但是如果你看到的图片只是整个物体的一小部分,那么你将不知道你看到的物品是什么,因为关注整体更容易知道物品是什么。如果你距离的再远一点,你就会看到物品的轮廓,那么你将依据物品的轮廓去判断物品的类别。输出我们识别的或者是数字,如果我们还是在MNIST上进行的练习,我们可以得到就是我们能识别的数字,其中再加上我们熟悉的输出层的激活函数softmax。提取图片的横向和纵向特征。提取完的是一个6*6的图片矩阵。

2025-02-12 19:24:02 429

原创 23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。

当输入的第1个因素对输出的3个值都起作用时,第1个因素就会被消除。这样做的原因是,要找到可以鉴别输出的3个值的非别的因素的自己的因素。当输入的第1个因素对输出的3个值都起作用时,第1个因素不会被消除,它只是在找更多的信息来支撑输出。让该有的正确的结果更加真确。在使用这个非线性激活函数的时候,其实我们重点还是学习的是他们的正向怎么传播,以及反向怎么传递的。第一:relu函数的正向传播函数是:当输入值(隐藏层)值大于了,就输出自己本身的值。通俗的来说就是,如果输入值是0或小于0,那么输出值的反向增强就没有。

2025-02-12 08:47:39 388

原创 22、深度学习 - 自学之路 - 隐藏层常用激活使用tanh函数,输出层激活函数使用softmax函数,对MNIST进行升级后的程序展示。

print("x_train[0:1000].reshape(1000,28*28)"+str(x_train[0:1000].reshape(1000,28*28)))#是一个全零的矩阵。layer_2_delta = (labels[batch_start:batch_end]-layer_2)/batch_size#计算权重反向误差第二层。layer_1_delta = layer_2_delta.dot(weight_1_2.T)*tanh2deriv(layer_1)#第一层权重误差。

2025-02-12 08:26:18 388

原创 21、深度学习-自学之路-,隐藏层常用激活函数relu、tanh、sigmoid,输出层激活函数softmax,sigmoid。还有很多其他的激活函数。这里我们先说一下常用的。

一、中间层或者是隐藏层的激活函数:第一个:relu激活函数的图片如下,图片看的更直观一些。

2025-02-11 16:34:47 1025

原创 20、深度学习-自学之路-过拟合的解决办法2小批量梯度下降,,在MNIST手写数字识别程序的基础上。

correct += int(np.argmax(layer_2[k:k+1])==np.argmax(labels[batch_start+k:batch_start+k+1]))#把每次预测成功率进行累加。layer_1_delta = layer_2_delta.dot(weight_1_2.T)*relu2deriv(layer_1)#第一层权重误差。(x_train,y_train),(x_test,y_test) = mnist.load_data() #第一次进行Mnist 数据的下载。

2025-02-09 09:54:00 322

55、深度学习-自学之路-自己搭建深度学习框架-16、使用LSTM解决RNN梯度消失和梯度爆炸的问题,重写莎士比亚风格文章

53、深度学习-自学之路-自己搭建深度学习框架-14、使用自己的架构搭建一个通过学习模仿莎士比亚风格的2000次的文章。并且在关键层配有详细解释。 55、深度学习-自学之路-自己搭建深度学习框架-16、使用LSTM解决RNN梯度消失和梯度爆炸的问题,重写莎士比亚风格文章。

2025-02-28

35、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,程序中训练使用的数据集

35、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,程序中训练使用的数据集

2025-02-20

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的 对应的数据集

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。对应的数据集。

2025-02-13

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的 对应的数据集

27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。对应的数据集。

2025-02-13

MKL15Z32VFM4-datasheet.pdf

mkl15系列数据手册

2021-12-23

PCB走线宽度和过电流值详解

PCB走线宽度和过电流值详解

2025-02-01

C8051F350.pdf

C8051F350资料

2021-12-23

IVC102.pdf ivc资料

IVC102.pdf

2021-12-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除