从零开始运用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/8/2 5:12:23 阅读更多 →
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/8/2 5:12:23 阅读更多 →
AI生成汇报级PPT难点与落地实践

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

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

2026/8/2 5:11:23 阅读更多 →

最新新闻

xAI人才流失启示:AI团队管理与技术精英职业选择深度分析

xAI人才流失启示:AI团队管理与技术精英职业选择深度分析

1. 项目概述:一场顶级AI人才地震的深度复盘最近科技圈最炸裂的消息,莫过于马斯克旗下xAI公司爆发的“创始人离职潮”。短短24小时内,两位联合创始人相继出走,而将时间线拉长到一个月,这已经是第三位华人创始成员离开。…

2026/8/2 6:32:57 阅读更多 →
基于AI智能体与万亿模型实现图像处理自动化:从原理到工程实践

基于AI智能体与万亿模型实现图像处理自动化:从原理到工程实践

1. 项目概述:当“思考模型”遇上“手搓PS”最近在AI圈和开发者社区里,一个组合词火了:“万亿思考模型”和“一句话手搓丐版PS”。乍一看,这像是两个毫不相干的概念被强行拼凑在一起——一边是听起来就高大上、动辄需要海量算力支撑…

2026/8/2 6:32:57 阅读更多 →
OpenClaw深度解析:腾讯开源AI智能体开发框架,如何降低企业级应用门槛?

OpenClaw深度解析:腾讯开源AI智能体开发框架,如何降低企业级应用门槛?

1. 从“龙虾手机”到“智能体孵化场”:OpenClaw的狂欢与本质 最近几天,我的开发者圈子被一个词刷屏了:OpenClaw。伴随着“全球首个龙虾孵化场”、“龙虾手机发布”这样充满噱头的标题,很多朋友跑来问我,这到底是个什么…

2026/8/2 6:32:57 阅读更多 →
Tomcat核心端口深度解析:8080、8005、8009的职责、配置与故障排查实战

Tomcat核心端口深度解析:8080、8005、8009的职责、配置与故障排查实战

1. 从一次线上故障说起:端口冲突引发的“血案”那天下午,系统监控突然报警,提示某个核心应用的Tomcat服务无法访问。登录服务器一看,Tomcat进程还在,但日志里赫然躺着一条错误信息:java.net.BindException:…

2026/8/2 6:32:57 阅读更多 →
从AndroZoo构建高质量APK样本库:自动化下载与筛选实战指南

从AndroZoo构建高质量APK样本库:自动化下载与筛选实战指南

1. 项目缘起:为什么我们需要一个高质量的APK样本库?做Android安全研究、恶意软件分析,或者想训练一个自己的AI模型来识别恶意应用,第一步也是最关键的一步是什么?是算法吗?是工具吗?都不是&…

2026/8/2 6:32:57 阅读更多 →
UE4SS脚本注入框架配置与Lua脚本开发实战指南

UE4SS脚本注入框架配置与Lua脚本开发实战指南

1. 项目概述:UE4SS是什么,以及为什么你需要它如果你是一名虚幻引擎4(UE4)的开发者或Modder,尤其是对游戏逆向、功能扩展或者自动化测试感兴趣,那么UE4SS这个名字你肯定不陌生。简单来说,UE4SS是…

2026/8/2 6:31:57 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →