当前位置: 首页 > article >正文

PyTorch全连接层实战:从图像分类到文本处理的5个经典案例

PyTorch全连接层实战从图像分类到文本处理的5个经典案例全连接层作为神经网络的基础构建块其重要性不言而喻。但很多学习者在掌握了基础理论后面对实际项目时仍会感到无从下手。本文将带你深入五个典型应用场景通过完整可运行的代码示例展示如何用PyTorch的nn.Linear解决实际问题。1. 手写数字识别MNIST图像分类实战MNIST数据集是深度学习入门的经典案例。让我们构建一个简单的全连接网络来实现手写数字识别。首先准备数据集import torch from torchvision import datasets, transforms # 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) # 加载数据集 train_dataset datasets.MNIST(./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(./data, trainFalse, transformtransform) # 创建数据加载器 train_loader torch.utils.data.DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader torch.utils.data.DataLoader(test_dataset, batch_size1000, shuffleTrue)接下来定义网络结构import torch.nn as nn import torch.nn.functional as F class MNISTNet(nn.Module): def __init__(self): super(MNISTNet, self).__init__() self.fc1 nn.Linear(28*28, 512) # 第一层全连接 self.fc2 nn.Linear(512, 256) # 第二层全连接 self.fc3 nn.Linear(256, 10) # 输出层 def forward(self, x): x x.view(-1, 28*28) # 展平图像 x F.relu(self.fc1(x)) x F.relu(self.fc2(x)) return F.log_softmax(self.fc3(x), dim1)训练过程的关键代码def train(model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device), target.to(device) optimizer.zero_grad() output model(data) loss F.nll_loss(output, target) loss.backward() optimizer.step()这个简单网络在测试集上能达到约98%的准确率。实践中可以通过以下方式进一步提升性能增加网络深度使用批归一化(BatchNorm)添加Dropout层防止过拟合尝试不同的优化器和学习率调度2. 情感分析IMDb电影评论分类文本分类是自然语言处理中的基础任务。我们使用IMDb电影评论数据集构建情感分析模型。首先处理文本数据from torchtext.datasets import IMDB from torchtext.data import Field, LabelField, BucketIterator TEXT Field(tokenizespacy, lowerTrue, include_lengthsTrue) LABEL LabelField(dtypetorch.float) train_data, test_data IMDB.splits(TEXT, LABEL) # 构建词汇表 TEXT.build_vocab(train_data, max_size25000) LABEL.build_vocab(train_data) # 创建迭代器 train_iterator, test_iterator BucketIterator.splits( (train_data, test_data), batch_size64, sort_within_batchTrue, sort_keylambda x: len(x.text) )定义网络结构class SentimentClassifier(nn.Module): def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim): super().__init__() self.embedding nn.Embedding(vocab_size, embedding_dim) self.fc1 nn.Linear(embedding_dim, hidden_dim) self.fc2 nn.Linear(hidden_dim, output_dim) def forward(self, text, text_lengths): embedded self.embedding(text) pooled embedded.mean(1) # 平均池化 hidden torch.relu(self.fc1(pooled)) return torch.sigmoid(self.fc2(hidden))训练时需要注意文本数据的特殊性使用嵌入层将单词转换为向量处理变长序列选择合适的池化方式这个基础模型可以达到约85%的准确率。改进方向包括使用预训练词向量引入LSTM或Transformer结构调整文本预处理流程3. 房价预测回归任务实战全连接网络同样适用于回归问题。我们使用波士顿房价数据集演示如何预测连续值。加载和处理数据from sklearn.datasets import load_boston from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split boston load_boston() X boston.data y boston.target # 数据标准化 scaler StandardScaler() X scaler.fit_transform(X) # 划分训练测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 转换为PyTorch张量 X_train torch.FloatTensor(X_train) y_train torch.FloatTensor(y_train).unsqueeze(1) X_test torch.FloatTensor(X_test) y_test torch.FloatTensor(y_test).unsqueeze(1)定义回归模型class HousePricePredictor(nn.Module): def __init__(self, input_dim): super(HousePricePredictor, self).__init__() self.fc1 nn.Linear(input_dim, 64) self.fc2 nn.Linear(64, 32) self.fc3 nn.Linear(32, 1) def forward(self, x): x torch.relu(self.fc1(x)) x torch.relu(self.fc2(x)) return self.fc3(x)训练回归模型的要点使用MSE损失函数评估指标改为RMSE或MAE注意数据标准化可能需要调整学习率回归任务常见挑战及解决方案问题解决方案数据量少使用更小的网络增加正则化特征尺度差异大标准化或归一化输入非线性关系增加网络深度使用合适的激活函数过拟合添加Dropout或L2正则化4. 多标签分类新闻主题分类Reuters新闻数据集包含46个互斥的新闻主题类别是多分类问题的典型案例。数据处理from torchtext.datasets import Reuters from torchtext.data import Field, LabelField, BucketIterator TEXT Field(tokenizespacy, lowerTrue) LABEL LabelField(dtypetorch.long) train_data, test_data Reuters.splits(TEXT, LABEL) # 构建词汇表 TEXT.build_vocab(train_data, max_size25000) LABEL.build_vocab(train_data) # 创建迭代器 train_iterator, test_iterator BucketIterator.splits( (train_data, test_data), batch_size64, sort_within_batchTrue, sort_keylambda x: len(x.text) )定义多分类网络class NewsClassifier(nn.Module): def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim): super().__init__() self.embedding nn.Embedding(vocab_size, embedding_dim) self.fc1 nn.Linear(embedding_dim, hidden_dim) self.fc2 nn.Linear(hidden_dim, output_dim) def forward(self, text, text_lengths): embedded self.embedding(text) pooled embedded.mean(1) # 平均池化 hidden torch.relu(self.fc1(pooled)) return self.fc2(hidden)多分类任务的关键点输出层神经元数等于类别数使用交叉熵损失评估指标关注准确率和混淆矩阵类别不平衡问题可能需要特殊处理提升多分类性能的技巧尝试不同的文本表示方法TF-IDFWord2VecBERT等预训练模型网络结构优化增加隐藏层使用批归一化添加注意力机制数据增强同义词替换随机删除单词回译5. 自定义数据集花卉图像分类最后我们看一个自定义数据集的案例使用Oxford 102花卉数据集。首先实现自定义数据集类from torch.utils.data import Dataset from PIL import Image import os class FlowerDataset(Dataset): def __init__(self, root_dir, transformNone): self.root_dir root_dir self.transform transform self.classes sorted(os.listdir(root_dir)) self.class_to_idx {cls: i for i, cls in enumerate(self.classes)} self.images [] for cls in self.classes: cls_dir os.path.join(root_dir, cls) for img_name in os.listdir(cls_dir): self.images.append((os.path.join(cls_dir, img_name), self.class_to_idx[cls])) def __len__(self): return len(self.images) def __getitem__(self, idx): img_path, label self.images[idx] image Image.open(img_path).convert(RGB) if self.transform: image self.transform(image) return image, label定义图像分类网络class FlowerClassifier(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(FlowerClassifier, self).__init__() self.fc1 nn.Linear(input_size, hidden_size) self.fc2 nn.Linear(hidden_size, hidden_size//2) self.fc3 nn.Linear(hidden_size//2, num_classes) def forward(self, x): x x.view(x.size(0), -1) # 展平图像 x torch.relu(self.fc1(x)) x torch.relu(self.fc2(x)) return self.fc3(x)处理自定义数据集的注意事项确保图像尺寸一致合理的数据增强策略处理类别不平衡适当的学习率调度全连接网络在图像分类中的局限性虽然全连接网络可以处理图像数据但当图像尺寸较大时参数量会急剧增加。例如输入尺寸第一层参数数量(隐藏层512)32x3232x32x512 ≈ 500K224x224224x224x512 ≈ 25M因此对于大尺寸图像通常会先使用卷积层提取特征再连接全连接层进行分类。

相关文章:

PyTorch全连接层实战:从图像分类到文本处理的5个经典案例

PyTorch全连接层实战:从图像分类到文本处理的5个经典案例 全连接层作为神经网络的基础构建块,其重要性不言而喻。但很多学习者在掌握了基础理论后,面对实际项目时仍会感到无从下手。本文将带你深入五个典型应用场景,通过完整可运行…...

FortiOS 7.0 HA配置避坑指南:从‘不同步’到绿灯全亮的五个关键检查点

FortiOS 7.0高可用性配置深度排障手册 当企业关键业务部署在FortiGate防火墙后方时,高可用性(HA)集群的稳定运行直接关系到业务连续性。但在实际部署中,约42%的技术团队会遇到配置完成后HA状态持续显示"不同步"或红灯告警的情况。本文将拆解五…...

8大网盘直链获取指南:告别限速的浏览器脚本解决方案

8大网盘直链获取指南:告别限速的浏览器脚本解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

Dislocker终极指南:如何在Linux和macOS上解锁Windows BitLocker加密磁盘

Dislocker终极指南:如何在Linux和macOS上解锁Windows BitLocker加密磁盘 【免费下载链接】dislocker FUSE driver to read/write Windows BitLocker-ed volumes under Linux / Mac OSX 项目地址: https://gitcode.com/gh_mirrors/di/dislocker 你是否曾经遇到…...

【2026最新】PicGo 使用教程:从入门到精通

PicGo 是一款开源图片上传工具,支持多种图床,把本地图片传到云端并生成可引用的链接。适合 Markdown 写作者、博客作者和技术文档编写者。 适合人群读完你能做到需要写文配图、又不想手动传图的人选图床、配好 PicGo、与 Typora 联动、排查常见问题目录 …...

别再套模板了!用ChatGPT+Zotero高效搭建你的第一篇SCI/EI论文框架(附保姆级步骤)

科研新手的AI加速器:用ChatGPTZotero构建高质量论文框架的实战指南 当你面对空白的文档和导师"尽快完成初稿"的催促时,是否感到无从下手?传统论文写作教程往往停留在理论层面,而今天我们要分享的是一套融合AI技术与文献…...

别再手动写乘法器了!Vivado IP核里的Multiplier和Complex Multiplier到底怎么选?

Vivado乘法器IP核深度解析:从基础配置到高阶实战 在FPGA开发中,乘法运算作为数字信号处理的核心操作,其实现方式直接影响系统性能和资源利用率。Vivado提供的乘法器IP核家族(Multiplier和Complex Multiplier)看似简单…...

别再手动检查了!用testssl.sh一键扫描你的网站TLS/SSL安全配置(附详细报告解读)

企业级TLS安全巡检实战:用testssl.sh构建自动化漏洞防御体系 当OpenSSL团队在2014年4月7日悄无声息地发布那个仅有12字节的补丁时,恐怕没人想到这个编号CVE-2014-0160的漏洞会掀起互联网安全领域的惊涛骇浪。Heartbleed漏洞犹如一记警钟,让全…...

浏览器书签管理的革命性解决方案:Neat Bookmarks树状扩展深度解析

浏览器书签管理的革命性解决方案:Neat Bookmarks树状扩展深度解析 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 你是否曾在数百个杂乱书…...

别再手动解析字符串了!用ANTLR4在IDEA里快速搞定一个四则运算计算器(附完整.g4文件)

告别手写解析器:用ANTLR4在IDEA中构建智能计算器的实战指南 每当需要处理复杂文本解析时,开发者们往往陷入手写递归下降解析器或调试晦涩正则表达式的泥潭。这种低效的开发方式不仅耗时耗力,还难以维护和扩展。想象一下,当你需要解…...

5个高级技巧:在React应用中构建专业级JSON编辑器

5个高级技巧:在React应用中构建专业级JSON编辑器 【免费下载链接】jsoneditor-react react wrapper implementation for https://github.com/josdejong/jsoneditor 项目地址: https://gitcode.com/gh_mirrors/js/jsoneditor-react JSONEditor-React是一个基于…...

Phi-3.5-mini-instruct效果展示:表格数据理解+自然语言解释+趋势预测三合一输出

Phi-3.5-mini-instruct效果展示:表格数据理解自然语言解释趋势预测三合一输出 1. 模型简介 Phi-3.5-mini-instruct 是一个轻量级但功能强大的开放模型,属于Phi-3模型家族。这个模型基于高质量的训练数据构建,特别擅长处理推理密集型任务。它…...

Argo CD 实战:从零构建你的第一个 GitOps 应用

1. 为什么你需要Argo CD? 如果你正在管理Kubernetes应用,肯定遇到过这样的场景:每次代码变更后,都要手动执行kubectl apply来更新集群状态。这种操作不仅容易出错,还很难追踪谁在什么时候改了什么东西。我在实际项目中…...

《采购与招标商品详情页前端性能优化实战》

📄 《采购与招标商品详情页前端性能优化实战》背景:政府采购与招标平台的商品详情页实际上是招标公告详情页,包含公告信息、采购需求、资格要求、评分标准、投标文件、澄清公告、开标记录等多个复杂模块。页面特点是信息权威性强、格式标准化…...

别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件

别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件 当你在Kubernetes生产环境中面临网络插件选择时,Flannel和Calico这两个名字总会反复出现。就像站在十字路口的旅行者,左边是平坦快捷的柏油马路,右边是功能丰富…...

思源宋体TTF:下一代开源中文字体架构与应用范式

思源宋体TTF:下一代开源中文字体架构与应用范式 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf Source Han Serif TTF作为Google与Adobe联合打造的开源Pan-CJK字体&#xf…...

API 网关怎么设计?一次讲清鉴权、路由、限流、灰度、日志与统一治理

API 网关怎么设计?一次讲清鉴权、路由、限流、灰度、日志与统一治理 大家好,我是一名有 4 年工作经验的 Java 后端开发。 微服务项目里,API 网关几乎是最容易被说成“就转发一下请求”的组件。 但真正做起来你会发现,很多稳定性、…...

终极指南:5分钟打造Windows便携Python开发环境的完整教程

终极指南:5分钟打造Windows便携Python开发环境的完整教程 【免费下载链接】winpython A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python. 项目地址: https://gitcode.com/gh_mirrors/wi/winpython WinP…...

如何快速掌握网盘直链下载助手:八大网盘下载加速终极教程

如何快速掌握网盘直链下载助手:八大网盘下载加速终极教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

如何打破B站缓存视频的格式枷锁?m4s-converter让你重获观看自由

如何打破B站缓存视频的格式枷锁?m4s-converter让你重获观看自由 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你在B站缓存了珍贵…...

实战:用WRF-Chem V3.9.1.1模拟一次华北雾霾过程(附完整namelist配置与排放数据处理心得)

实战:用WRF-Chem V3.9.1.1模拟华北雾霾的完整技术指南 华北地区秋冬季雾霾问题一直是环境科学研究的重点。本文将基于WRF-Chem V3.9.1.1版本,详细介绍如何从零搭建一个针对华北雾霾事件的数值模拟系统。不同于基础教程,我们聚焦于实际科研项目…...

PLM、ERP、MES、CRM:解码企业数字化转型的四大核心引擎

1. 四大系统如何构建企业数字化闭环 想象一下你经营一家汽车制造厂。从设计师在电脑上画出一个新车型的3D模型,到最终客户开着这辆车离开4S店,整个过程就像一场接力赛。PLM、ERP、MES、CRM就是四位关键选手,他们传递的不是接力棒,…...

5分钟解决AutoCAD字体缺失问题:FontCenter智能字体管理插件完整指南

5分钟解决AutoCAD字体缺失问题:FontCenter智能字体管理插件完整指南 【免费下载链接】FontCenter AutoCAD自动管理字体插件 项目地址: https://gitcode.com/gh_mirrors/fo/FontCenter 还在为AutoCAD图纸中出现的问号和乱码文字而烦恼吗?FontCente…...

nli-MiniLM2-L6-H768效果展示:开源项目README与Issue描述的蕴含关系质量评估

nli-MiniLM2-L6-H768效果展示:开源项目README与Issue描述的蕴含关系质量评估 1. 模型核心能力解析 nli-MiniLM2-L6-H768是一个专为文本关系判断设计的轻量级自然语言推理模型。与常见的生成式AI不同,它的核心价值在于精准评估两段文本之间的逻辑关系。…...

南北阁 Nanbeige 4.1-3B 开源模型应用:政务问答系统本地化部署实践

南北阁 Nanbeige 4.1-3B 开源模型应用:政务问答系统本地化部署实践 想体验一个能流畅对话、还能“看见”它思考过程的本地AI助手吗?今天,我们就来聊聊如何将南北阁(Nanbeige)4.1-3B这个轻量又聪明的国产模型&#xff…...

15N70-ASEMI中大功率场景的能效新王者15N70

15N70-ASEMI中大功率场景的能效新王者15N70型号:16N65沟道:NPN品牌:ASEMI封装:TO-220F批号:最新导通内阻:0.6Ω漏源电流:15A漏源电压:700V引脚数量:3特性:N沟…...

从vector的push_back到emplace_back:聊聊C++11如何让容器操作更‘现代’

从vector的push_back到emplace_back:C11如何重构容器操作范式 当你在现代C代码库中看到emplace_back频繁出现时,这不仅仅是一个语法糖的替换——它标志着C语言设计哲学的一次重大转向。作为从C98/03时代走过来的开发者,理解这种变化背后的深层…...

网盘直链下载助手:八大主流网盘全速下载的完整解决方案

网盘直链下载助手:八大主流网盘全速下载的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

深度解析:如何通过软件协议逆向工程实现iOS 15-16 iCloud绕过

深度解析:如何通过软件协议逆向工程实现iOS 15-16 iCloud绕过 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 探索基于checkm8漏洞的硬件级解锁技术方案 在iOS设备安全领域,iC…...

LattePanda打造Steam Machine:硬件选型与系统优化指南

1. 从零打造一台LattePanda驱动的Steam Machine去年Valve宣布推迟新一代Steam Machine发布时,作为一名硬件改装爱好者,我决定自己动手复刻这个经典设备。经过三个月的设计和调试,这台基于LattePanda单板机的IOTA版本不仅完美运行Bazzite系统&…...