从零开始运用PyTorch构建神经网络实现分辨蚂蚁和蜜蜂
在初学PyToch和神经网络时面对众多的概念和函数我们可能会很迷惑如雾里看花。这时最好的方法便是做一个简单的小项目理解这个项目的构成虽然博主也是新手但我们不妨一起通过PyTorch来编写一个可以区分蜜蜂和蚂蚁的net。这是蜜蜂和蚂蚁训练集测试集的下载地址来源于B站视频评论区。首先是我们需要的包import torch import torch.nn as nn import torch.nn.function as F import torchvision #读取图片 from torchvision import transforms然后第一步是录入我们训练和测试用的照片。先设定好照片的统一格式transformtransforms.Compose([ transforms.Resize((32,32)), #像素统一转换为32*32 #如果想让照片变得清晰点记得多加几个卷积层 transforms.Tensor #统一转化为张量 ])然后导入训练照片和测试照片trainsettorchvision.datasets.Imagefloder( rootr训练照片储存地址,#Python中地址的\会和\n混淆所以一般在前面加个r或者用\\ trainsformtransform ) trainloadertorch.utils.data.DataLoader( trainset, #定义如何给net图片 batch_size4, #每次会给四张图片 shuffleTrue, #每次完整的训练伦次会打乱照片顺序 num_wokers0 #单进程运行 ) #同理定义测试集 testsettorchvision.datasets.Imagefloder( rootr训练照片储存地址 trainsformtransform ) testloadertorch.utils.data.DataLoader( trainset, #定义如何给net图片 batch_size4, #每次会给四张图片 shuffleTrue, #每次完整的训练伦次会打乱照片顺序 num_wokers0 #单进程运行 ) #定义种类 classes(ants,bees)接下来开始定义netclass Net(nn.Module): def __init__(self): super(Net,self).__init__ #标准格式 self.conv1nn.Conv2d(3,6,5) #定义第一个卷积层3代表彩色照片6代表6个卷积核 #5代表每个卷积核尺寸为5*5 self.poolnn.MaxPool2d(2,2) #定义池化矩阵 self.conv2nn.Conv2d(6,16,5) #定义第二个卷积层 self.fc1nn.Linear(16*5*5,120)#16和最后一个卷积层输出对应5*5由公式计算得到 self.fc2nn.Linear(120,84) #这里先转换为120再到84最后到2ants和bees是 self.fc3nn.Linear(84,2) #公式写法当然也可以直接由120到2 def forward(self,x): xself.pool(F.relu(self.conv1(x))) #按顺序池化 xself.pool(F.relu(self.conv2(x))) xtorch.flatten(x,1) #展平fc只接收一维变量 xF.relu(self.fc1(x)) xF.relu(self.fc2(x)) xself.fc3(x) return x #输出结果 netNet()在fc1中的5*5原自公式其中W指照片原尺寸K代表卷积核大小或池化大小P代表填充默认为零S代表步长经过卷积核一般为1经过池化矩阵我们这里为2。也就是说如果我们统一的图片尺寸是256*256那么经过两组卷积池化后会尺寸变成61*61即fc1的括号变成16*61*61120这会相当麻烦所以如果大家想取大像素还请适当增加卷积层个数。接下来我们开始梯度下降criterionnn.CrossEntropyLoss() optimizertorch.optim.SGD(net.parameters(),lr0.01,momentum0.9)#优化器选择带动量的SGD print(开始训练) for epoch in range(训练轮数) for i , data in enumerate(trainloader,0): inputs,labels data outputsnet(inputs) optimitzer.zero_grad() #每次梯度记得归零 losscriter(outputs,labels) loss.backward optimizer.step() print(训练完成) #储存训练结束后的参数 PATHr\-.pth #储存的地址记得提前建好.pth文件 torch.save(net.state_dict(),PATH)最后我们对训练完成后的net进行测试snet.load_state_dict(torch.load(PATH)) #读取上面储存的参数 net.eval() #结束学习即下面运行测试集时不进行迭代 total0 correct0 with torch.no_grad(): #不计算梯度节约算力 for data in testloader: images , labels data outputsnet(images) _, predicted torch.max(outputs,1)# _,指把返回的images值舍弃 #毕竟我们只在意labels对不对 #最后的1指的是一维 #不直接使用totallen(testset)的原因是电脑会舍弃总数对每组照片的余数 total labels.size(0) correct (predicted labels).sum().itrm() print(f正确率为{100*correct//total}%。)至此我们的分辨蜜蜂和蚂蚁的神经网络就此写完了接下来我们可以随便测试一张照片同时想要直接读取存好的地址不重新训练浪费时间可以这样写import os PATHr-\.pth #训练后参数储存的地址 if os.path.exists(PATH): net.load_state_dict(torch.load(PATH)) else: #训练过程 #…………然后from PIL import Image image_pathr你想测试的照片地址 imgImage.open(image_path).convert(RGB) img_tensortransfrom(img) #将我们选择的照片变为3*32*32的张量 img_tensorimg_tensor.unsqueeze(0) #在这个三维张量前再插入一个维度批次1 #因为Conv2d只支持四维变量 with torch.no_grad: outputsnet(img) -, predicted torch.max(outputs,1) resultpredicted.item() print(classes[result]) #输出具体类别最后是如何运用显卡GPU加速我们的训练devicetorch.device(cuda:0) #首先把net转移进GPU netNet() net.to(device) #最后记得把数据也转移进GPUnet和数据必须同时在CPU或者同时在GPU #……训练过程…… inputs inputs.to(device) labels labels.to(device) #……正常后续流程……最后说说题外话我感觉用PyCharm编写Python中的会方便很多它会直接提醒你括号里的数字代表什么

相关新闻

Linux 常用快捷指令对照大全

Linux 常用快捷指令对照大全

🐧 Linux 常用快捷指令对照大全 1. 核心必背(终端命令行编辑) 这是你在终端里输命令时,最常用到的编辑快捷键,能极大提升打字效率。 快捷键英文 / 全称作用(做什么的)使用频率TabTab key自动…

2026/10/16 14:25:29 阅读更多 →
7英寸DSI接口LCD屏驱动实战:从树莓派CM4到STM32H7的完整指南

7英寸DSI接口LCD屏驱动实战:从树莓派CM4到STM32H7的完整指南

1. 项目概述:一块7英寸DSI接口LCD屏的深度探索最近在折腾一个嵌入式显示项目,手头拿到了一块标注为“7inch DSI LCD (E)”的屏幕。对于玩惯了HDMI或者传统RGB、SPI接口屏的开发者来说,DSI(Display Serial Interface)接…

2026/10/16 14:51:32 阅读更多 →
AI生成汇报级PPT难点与落地实践

AI生成汇报级PPT难点与落地实践

在企业办公、商务汇报、职场复盘、项目路演等主流商业场景中,PPT早已不是简单的图文展示工具,而是商业逻辑输出、工作成果沉淀、业务价值传递的核心载体。一份合格的汇报PPT,需要兼顾逻辑严谨性、版式专业性、内容适配性与视觉统一性&#xf…

2026/10/17 19:33:21 阅读更多 →

最新新闻

CiteSpace 6.2.R1 部署与参数调优实战指南

CiteSpace 6.2.R1 部署与参数调优实战指南

简介:本资源为CiteSpace 6.2.R1正式发布版Windows可执行安装包,面向科研人员、硕博研究生及文献计量初学者,解决学术文献可视化分析中工具获取难、版本不稳定、离线部署不便等实际问题。压缩包共305个文件,含核心可执行程序&#…

2026/10/18 14:26:32 阅读更多 →
docker启动任意容器显示端口被占用

docker启动任意容器显示端口被占用

文章目录1、错误原文2、错误原因3、解决办法1、错误原文 Container zhiling-redis StartingError response from daemon: driver failed programming external connectivity on endpoint zhiling-redis (265ba54ed4403dd1b5fb78c541ab5d9f1a147c994c3df508e89b869067702093e): …

2026/10/18 14:26:32 阅读更多 →
LinkedList与链表(一)

LinkedList与链表(一)

1.为什么要学习LinkedList?我们刚刚学习了ArrayList,增添数据需要扩容操作,浪费空间。查找数据的时间复杂度按下标索引的可以O(1),按内容查找的就需要O(N)。添加某一点的数据&#x…

2026/10/18 14:26:32 阅读更多 →
AI的成长----AI应用范例

AI的成长----AI应用范例

作为国内首批使用Chat GPT 4的人之一 ,GPT刚刚震撼发布,我就在收到了消息,然后过了一个月就开始使用了。如今deepseek作为全球首个推理模型,更加深得人心。1️⃣ 锁定赛道——了解你的领域与受众2️⃣ 产品画像——深挖产品细节亮…

2026/10/18 14:26:32 阅读更多 →
用卫星地图训练无人机导航!SatNav:11.8万条长程导航任务,真机部署已验证

用卫星地图训练无人机导航!SatNav:11.8万条长程导航任务,真机部署已验证

「从室内走向城市低空」 目录 01 从卫星地图构建长程视觉语言导航任务 02 现有模型在 SatNav 上的表现 03 SwiftVLN:比较不同记忆设计的效果 04 从卫星图像训练到真实无人机飞行 05 写在最后 “沿着这条路飞,在第三个路口左转&…

2026/10/18 14:26:32 阅读更多 →
C++ QT数独游戏工程:可调试、可交作业的GUI编程实践

C++ QT数独游戏工程:可调试、可交作业的GUI编程实践

简介:这是一份面向C与Qt初学者的数独游戏课程设计实践资源,适用于高校编程语言课、图形界面开发实训或小型游戏项目实践。资源完整实现了一个具备图形化交互能力的数独游戏软件,支持空白数独初始化、数字填入、颜色状态区分(黑色初…

2026/10/18 14:25:32 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →