深度学习处理文本
一、反向传播二、优化器1. Adam优化器1.1.Adam优化器相关参数学习率一般取0.001一阶矩估计指数衰减率一般取0.9二阶矩估计指数衰减率一般取0.999微小常数如防止除以零带有参数的随机目标函数是模型训练中需要最小化或最大化的函数初始参数向量模型参数的初始值1.2.Adam优化器算法步骤1.初始化初始化一阶矩向量为0。初始化二阶矩向量为0。初始化时间步为0。2.迭代过程2.1.更新一阶矩和二阶矩估计2.2.偏差修正 (Bias Correction)2.3.参数更新含义Adam的更新规则可以直观理解为用带有动量的梯度作为更新方向同时用类似RMSProp的来对每个参数的学习率进行自适应缩放。偏差修正确保了在训练初期矩估计也是无偏的。1.3. Adam优化器优势及适用场景1. 实现简单计算高效对内存需求少2. 超参数具有很好的解释性且通常无需调整或仅需很少的微调3. 更新的步长能够被限制在大致的范围内初始学习率4. 能够表现出自动调整学习率5. 很适合应用于大规模的数据及参数的场景6. 适用于不稳定目标函数7. 适用于梯度稀疏或梯度存在很大噪声的问题2. AdamW优化器在标准的L2正则化中损失函数会增加一项其梯度为。在Adam中这个正则项梯度会进入和的计算使得权重衰减的效果与梯度的量级耦合在一起导致对大学习率和较大权重的参数实际的权重衰减效果会减弱。AdamW 将权重衰减从梯度计算中解耦出来直接在参数更新步骤中应用1.执行标准的Adam更新 (不含正则项的梯度)2.独立进行权重衰减:含义权重衰减不再影响梯度的移动平均估计。它变成了一个独立的、对所有参数通常除了Normalization层和Bias施加的、与其梯度大小无关的“缩放”步骤更符合其作为正则化手段的初衷。三、NLP任务任务字符串分类判断字符串中是否出现了指定字符指定字符a 正样本abcd 负样本bcdbStep1字符数值化每个字符转化为同维度向量“abcd” - 4*5矩阵矩阵形状 文本长度 * 向量长度通过embedding层实现1.embedding层embedding矩阵是可训练的参数一般会在模型构建时随机初始化也可以使用预训练的词向量来做初始化此时也可以选择不训练embedding层中的参数输入的整数序列可以有重复但取值不能超过Embedding矩阵的列数核心价值将离散值转化为向量在nlp任务和各类特征工程中应用广泛搭配词表文件对于中文通常使用字对于英文使用token多个语种和符号可以出现在同一份词表中目的“abc --词表-- 0,1,2 --Embedding层-- 3*n的矩阵 -- modelimport torch import torch.nn as nn embedding层的处理 num_embeddings 6 #通常对于nlp任务此参数为字符集字符总数 embedding_dim 5 #每个字符向量化后的向量维度 embedding_layer nn.Embedding(num_embeddings, embedding_dim) print(随机初始化权重) print(embedding_layer.weight) print(################) #构造字符表 vocab { a : 0, b : 1, c : 2, d : 3, e : 4, f : 5, } def str_to_sequence(string, vocab): return [vocab[s] for s in string] string1 abcde string2 ddccb string3 fedab sequence1 str_to_sequence(string1, vocab) sequence2 str_to_sequence(string2, vocab) sequence3 str_to_sequence(string3, vocab) print(sequence1) print(sequence2) print(sequence3) x torch.LongTensor([sequence1, sequence2, sequence3]) embedding_out embedding_layer(x) print(embedding_out)Step2矩阵转化为向量池化求平均2.池化层降低了后续网络层的输入维度缩减模型大小提高计算速度提高了特征的鲁棒性防止过拟合Step3向量到数值采取最简单的线性公式Step4数值归一化sigmoid函数进行归一化处理映射到01之间注意字母向量和线性层的w和b需要通过训练优化3.NLP任务Demoimport torch import torch.nn as nn import numpy as np import random import json import matplotlib.pyplot as plt 基于pytorch的网络编写 实现一个网络完成一个简单nlp任务 判断文本中是否有某些特定字符出现 class TorchModel(nn.Module): def __init__(self, vector_dim, sentence_length, vocab): super(TorchModel, self).__init__() self.embedding nn.Embedding(len(vocab), vector_dim) #embedding层 self.pool nn.AvgPool1d(sentence_length) #池化层 self.classify nn.Linear(vector_dim, 1) #线性层 self.activation torch.sigmoid #sigmoid归一化函数 self.loss nn.functional.mse_loss #loss函数采用均方差损失 #当输入真实标签返回loss值无真实标签返回预测值 def forward(self, x, yNone): x self.embedding(x) #(batch_size, sen_len) - (batch_size, sen_len, vector_dim) x x.transpose(1, 2) #(batch_size, sen_len, vector_dim) - (batch_size, vector_dim, sen_len) x self.pool(x) #(batch_size, vector_dim, sen_len)-(batch_size, vector_dim, 1) x x.squeeze() #(batch_size, vector_dim, 1) - (batch_size, vector_dim) x self.classify(x) #(batch_size, vector_dim) - (batch_size, 1) 3*5 5*1 - 3*1 y_pred self.activation(x) #(batch_size, 1) - (batch_size, 1) if y is not None: return self.loss(y_pred, y) #预测值和真实值计算损失 else: return y_pred #输出预测结果 #字符集随便挑了一些字实际上还可以扩充 #为每个字生成一个标号 #{a:1, b:2, c:3...} #abc - [1,2,3] def build_vocab(): chars abcdefghijklmnopqrstuvwxyz #字符集 vocab {pad:0} for index, char in enumerate(chars): vocab[char] index1 #每个字对应一个序号 vocab[unk] len(vocab) #26 return vocab #随机生成一个样本 #从所有字中选取sentence_length个字 #反之为负样本 def build_sample(vocab, sentence_length): #随机从字表选取sentence_length个字可能重复 x [random.choice(list(vocab.keys())) for _ in range(sentence_length)] #指定哪些字出现时为正样本 if set(abc) set(x): y 1 #指定字都未出现则为负样本 else: y 0 x [vocab.get(word, vocab[unk]) for word in x] #将字转换成序号为了做embedding return x, y #建立数据集 #输入需要的样本数量。需要多少生成多少 def build_dataset(sample_length, vocab, sentence_length): dataset_x [] dataset_y [] for i in range(sample_length): x, y build_sample(vocab, sentence_length) dataset_x.append(x) dataset_y.append([y]) return torch.LongTensor(dataset_x), torch.FloatTensor(dataset_y) #建立模型 def build_model(vocab, char_dim, sentence_length): model TorchModel(char_dim, sentence_length, vocab) return model #测试代码 #用来测试每轮模型的准确率 def evaluate(model, vocab, sample_length): model.eval() x, y build_dataset(200, vocab, sample_length) #建立200个用于测试的样本 print(本次预测集中共有%d个正样本%d个负样本%(sum(y), 200 - sum(y))) correct, wrong 0, 0 with torch.no_grad(): y_pred model(x) #模型预测 for y_p, y_t in zip(y_pred, y): #与真实标签进行对比 if float(y_p) 0.5 and int(y_t) 0: correct 1 #负样本判断正确 elif float(y_p) 0.5 and int(y_t) 1: correct 1 #正样本判断正确 else: wrong 1 print(正确预测个数%d, 正确率%f%(correct, correct/(correctwrong))) return correct/(correctwrong) def main(): #配置参数 epoch_num 20 #训练轮数 batch_size 20 #每次训练样本个数 train_sample 500 #每轮训练总共训练的样本总数 char_dim 20 #每个字的维度 sentence_length 6 #样本文本长度 learning_rate 0.005 #学习率 # 建立字表 vocab build_vocab() # 建立模型 model build_model(vocab, char_dim, sentence_length) # 选择优化器 optim torch.optim.Adam(model.parameters(), lrlearning_rate) log [] # 训练过程 for epoch in range(epoch_num): model.train() watch_loss [] for batch in range(int(train_sample / batch_size)): x, y build_dataset(batch_size, vocab, sentence_length) #构造一组训练样本 optim.zero_grad() #梯度归零 loss model(x, y) #计算loss loss.backward() #计算梯度 optim.step() #更新权重 watch_loss.append(loss.item()) print(\n第%d轮平均loss:%f % (epoch 1, np.mean(watch_loss))) acc evaluate(model, vocab, sentence_length) #测试本轮模型结果 log.append([acc, np.mean(watch_loss)]) #画图 plt.plot(range(len(log)), [l[0] for l in log], labelacc) #画acc曲线 plt.plot(range(len(log)), [l[1] for l in log], labelloss) #画loss曲线 plt.legend() plt.show() #保存模型 torch.save(model.state_dict(), model.pth) # 保存词表 writer open(vocab.json, w, encodingutf8) writer.write(json.dumps(vocab, ensure_asciiFalse, indent2)) writer.close() return #使用训练好的模型做预测 def predict(model_path, vocab_path, input_strings): char_dim 20 # 每个字的维度 sentence_length 6 # 样本文本长度 vocab json.load(open(vocab_path, r, encodingutf8)) #加载字符表 model build_model(vocab, char_dim, sentence_length) #建立模型 model.load_state_dict(torch.load(model_path)) #加载训练好的权重 x [] for input_string in input_strings: x.append([vocab[char] for char in input_string]) #将输入序列化 model.eval() #测试模式 with torch.no_grad(): #不计算梯度 result model.forward(torch.LongTensor(x)) #模型预测 for i, input_string in enumerate(input_strings): print(输入%s, 预测类别%d, 概率值%f % (input_string, round(float(result[i])), result[i])) #打印结果 if __name__ __main__: main() test_strings [fnvfee, wzsdfg, rqwdeg, nakwww] predict(model.pth, vocab.json, test_strings)四、网络结构1.全连接层2.RNNRecurrent Neural Network循环神经网络主要思想将整个序列划分成多个时间步将每一个时间步的信息依次输入模型同时将模型输出的结果传给下一个时间步公式class TorchRNN(nn.Module): def __init__(self, input_size, hidden_size): super(TorchRNN, self).__init__() self.layer nn.RNN(input_size, hidden_size, biasFalse, batch_firstTrue) def forward(self, x): return self.layer(x)3.CNNConvolutional Neural Network卷积神经网络以卷积操作为基础的网络结构每个卷积核可以看成一个特征提取器class TorchCNN(nn.Module): def __init__(self, in_channel, out_channel, kernel): super(TorchCNN, self).__init__() self.layer nn.Conv2d(in_channel, out_channel, kernel, biasFalse) def forward(self, x): return self.layer(x)4.归一化 Normalizationbatch normalizationlayer normalization5.Dropout层作用减少过拟合按照指定概率随机丢弃一些神经元将其化为零其余元素乘以 1 / (1 – p)进行放大如何理解其作用1强迫一个神经单元和随机挑选出来的其他神经单元共同工作消除减弱了神经元节点间的联合适应性增强了泛化能力2可以看做是一种模型平均由于每次随机忽略的隐层节点都不同这样就使每次训练的网络都是不一样的每次训练都可以单做一个“新”的模型启示计算方式并不是越复杂就越好

相关新闻

STP协议详解:网络环路防护与实战配置指南

STP协议详解:网络环路防护与实战配置指南

1. STP协议概述:网络世界的红绿灯系统想象一下城市交通没有红绿灯会怎样?车辆会在十字路口相互碰撞,形成永久堵塞。STP(生成树协议)就是网络世界的红绿灯系统,专门解决以太网中的"交通堵塞"问题—…

2026/10/12 17:11:38 阅读更多 →
破解物理AI技术困局(19):TVA实现触觉-视觉跨模态融合

破解物理AI技术困局(19):TVA实现触觉-视觉跨模态融合

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/10/4 5:28:14 阅读更多 →
动物森友会存档编辑器终极指南:3小时掌握岛屿改造核心技巧

动物森友会存档编辑器终极指南:3小时掌握岛屿改造核心技巧

动物森友会存档编辑器终极指南:3小时掌握岛屿改造核心技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》中繁琐的物品收集和漫长的岛屿改造而…

2026/10/11 6:39:23 阅读更多 →

最新新闻

AI编程教程为何爆火2万Star:从零基础到生产落地的完整路径

AI编程教程为何爆火2万Star:从零基础到生产落地的完整路径

1. 这个“2万Star”到底意味着什么:从GitHub数字看AI编程教程的真实分量很多人看到标题里“2万Star”第一反应是:哇,火了。但作为在开发者教育领域摸爬滚打十多年的老手,我得先泼一盆冷静的水——Star数从来不是教学内容质量的直接…

2026/10/14 7:19:37 阅读更多 →
DNN多分类任务核心设计:Softmax、交叉熵与PyTorch实战

DNN多分类任务核心设计:Softmax、交叉熵与PyTorch实战

2. 多分类任务的三个核心设计问题先说结论:DNN跑多分类,真正需要想清楚的只有三件事——输出层的神经元数量、输出层的激活函数、损失函数的选择。这三件事定下来,模型框架基本就定死了,后面做的都是调参和优化。2.1 输出层神经元…

2026/10/14 7:19:37 阅读更多 →
离线环境部署MySQL 5.7:tar.gz包安装与避坑指南

离线环境部署MySQL 5.7:tar.gz包安装与避坑指南

简介:本资源为 MySQL 5.7.40 在 Linux-glibc2.12 环境下的 x86_64 离线安装包,面向需要在无外网或内网环境中部署关系型数据库的运维与后端开发人员。压缩包共 379 个文件,约 646.59MB,以 h 头文件、so 动态库、xml 配置、sql 脚本…

2026/10/14 7:19:37 阅读更多 →
华为HCIP-AI测试卷高效复习指南:从背答案到动手验证

华为HCIP-AI测试卷高效复习指南:从背答案到动手验证

简介:这份华为认证HCIP-AI测试卷与答案文档,面向备考华为人工智能高级认证的考生及希望系统检验AI基础知识的开发者,帮助梳理图像处理、语音合成、HiAI生态与快应用开发等核心考点。资源包共1个docx文件,约14KB,内容以…

2026/10/14 7:19:37 阅读更多 →
基于rSVD与软阈值的Matlab高效信号去噪方法

基于rSVD与软阈值的Matlab高效信号去噪方法

1. 项目背景与核心挑战谐波噪声是信号处理领域常见的干扰类型,广泛存在于电力系统监测、机械振动分析、生物医学信号采集等场景。传统去噪方法如傅里叶滤波、小波变换在面对高维大数据集时往往面临计算效率低下、噪声鲁棒性不足的问题。这个Matlab项目提出了一种融合…

2026/10/14 7:19:37 阅读更多 →
智慧农业最后一百米:破解乡村数字化落地的设备与运维难题

智慧农业最后一百米:破解乡村数字化落地的设备与运维难题

做了快八年农业数字化项目,我最深的一个体会是:智慧农业真正难的从来不是算法有多高级、传感器有多精密,而是怎么让技术在没有网线、没有专职IT人员、甚至不少农户只用老年机的村子里,持续稳定地转起来。前段时间复盘了一个扎根基…

2026/10/14 7:18:36 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →