01-快速入门

发布时间:2026/7/10 23:15:34
01-快速入门 快速入门Quickstart本节将介绍机器学习中常见任务的 API。处理数据Working with DataPyTorch 提供了两个处理数据的原语torch.utils.data.DataLoader和torch.utils.data.Dataset。Dataset存储样本及其对应的标签DataLoader在Dataset外包装了一个可迭代对象。importtorch# 导入 PyTorch 核心库fromtorchimportnn# 导入神经网络模块fromtorch.utils.dataimportDataLoader# 导入数据加载器fromtorchvisionimportdatasets# 导入视觉数据集模块fromtorchvision.transformsimportv2# 导入数据变换模块 v2 版本PyTorch 提供了领域特定的库如 TorchText、TorchVision 和 TorchAudio这些库都包含数据集。在本教程中我们将使用 TorchVision 数据集。torchvision.datasets模块包含了许多真实世界视觉数据的Dataset对象如 CIFAR、COCO。在本教程中我们使用 FashionMNIST 数据集。每个 TorchVisionDataset都包含两个参数transform和target_transform分别用于修改样本和标签。# 从开放数据集下载训练数据training_datadatasets.FashionMNIST(# 创建 FashionMNIST 训练数据集对象rootdata,# 数据存储路径trainTrue,# 指定为训练集downloadTrue,# 如果数据不存在则从网络下载transformv2.Compose([# 对图像进行变换组合v2.ToImage(),# 将数据转为 torchvision 的 Image 张量格式v2.ToDtype(torch.float32,scaleTrue)# 转为 float32 类型并将像素值缩放到 [0,1]]),)# 从开放数据集下载测试数据test_datadatasets.FashionMNIST(# 创建 FashionMNIST 测试数据集对象rootdata,# 数据存储路径trainFalse,# 指定为测试集downloadTrue,# 如果数据不存在则从网络下载transformv2.Compose([# 对图像进行变换组合与训练集相同v2.ToImage(),# 将数据转为 torchvision 的 Image 张量格式v2.ToDtype(torch.float32,scaleTrue)# 转为 float32 类型并将像素值缩放到 [0,1]]),)我们将Dataset作为参数传递给DataLoader。这将在数据集外包装一个可迭代对象并支持自动批处理、采样、打乱和多进程数据加载。这里我们定义批大小为 64即 dataloader 可迭代对象中的每个元素将返回一个包含 64 个特征和标签的批次。batch_size64# 定义批大小为 64# 创建数据加载器train_dataloaderDataLoader(training_data,batch_sizebatch_size)# 用训练数据集创建数据加载器test_dataloaderDataLoader(test_data,batch_sizebatch_size)# 用测试数据集创建数据加载器forX,yintest_dataloader:# 遍历测试数据加载器print(fShape of X [N, C, H, W]:{X.shape})# 打印输入特征的形状批次大小、通道数、高度、宽度print(fShape of y:{y.shape}{y.dtype})# 打印标签的形状和数据类型break# 只查看第一个批次后跳出循环输出Shape of X [N, C, H, W]: torch.Size([64, 1, 28, 28]) Shape of y: torch.Size([64]) torch.int64创建模型Creating Models要在 PyTorch 中定义神经网络我们创建一个继承自nn.Module的类。我们在__init__函数中定义网络的层并在forward函数中指定数据如何通过网络。为了加速神经网络中的运算我们将其移动到加速器上如 CUDA、MPS、MTIA 或 XPU。如果当前加速器可用我们将使用它否则使用 CPU。# 检查加速器是否可用如果可用则使用加速器否则使用 CPUdevicetorch.accelerator.current_accelerator().typeiftorch.accelerator.is_available()elsecpuprint(fUsing{device}device)# 打印当前使用的设备类型# 定义模型classNeuralNetwork(nn.Module):# 定义神经网络类继承自 nn.Moduledef__init__(self):# 初始化方法super().__init__()# 调用父类的初始化方法self.flattennn.Flatten()# 创建展平层将 2D 图像展平为 1D 向量self.linear_relu_stacknn.Sequential(# 创建顺序容器按顺序包含各层nn.Linear(28*28,512),# 第一个全连接层输入 784 维输出 512 维nn.ReLU(),# ReLU 激活函数引入非线性nn.Linear(512,512),# 第二个全连接层输入 512 维输出 512 维nn.ReLU(),# ReLU 激活函数nn.Linear(512,10)# 第三个全连接层输入 512 维输出 10 维对应 10 个类别)defforward(self,x):# 前向传播方法定义数据如何通过网络xself.flatten(x)# 将输入图像展平logitsself.linear_relu_stack(x)# 通过全连接层序列得到原始预测值logitsreturnlogits# 返回预测值modelNeuralNetwork().to(device)# 创建模型实例并移动到指定设备print(model)# 打印模型结构输出Using cuda device NeuralNetwork( (flatten): Flatten(start_dim1, end_dim-1) (linear_relu_stack): Sequential( (0): Linear(in_features784, out_features512, biasTrue) (1): ReLU() (2): Linear(in_features512, out_features512, biasTrue) (3): ReLU() (4): Linear(in_features512, out_features10, biasTrue) ) )优化模型参数Optimizing the Model Parameters要训练模型我们需要一个损失函数和一个优化器。loss_fnnn.CrossEntropyLoss()# 定义交叉熵损失函数适用于多分类任务optimizertorch.optim.SGD(model.parameters(),lr1e-3)# 定义 SGD 随机梯度下降优化器学习率为 0.001在单个训练循环中模型对训练数据集进行预测以批次形式输入并通过反向传播预测误差来调整模型的参数。deftrain(dataloader,model,loss_fn,optimizer):# 定义训练函数sizelen(dataloader.dataset)# 获取数据集的样本总数model.train()# 将模型设置为训练模式forbatch,(X,y)inenumerate(dataloader):# 遍历数据加载器中的每个批次X,yX.to(device),y.to(device)# 将数据和标签移动到指定设备# 计算预测误差predmodel(X)# 前向传播得到模型预测lossloss_fn(pred,y)# 计算预测值与真实标签之间的损失# 反向传播loss.backward()# 反向传播计算梯度optimizer.step()# 根据梯度更新模型参数optimizer.zero_grad()# 清零梯度防止梯度累积ifbatch%1000:# 每 100 个批次打印一次loss,currentloss.item(),(batch1)*len(X)# 获取当前损失值和已处理的样本数print(floss:{loss:7f}[{current:5d}/{size:5d}])# 打印损失和进度我们还在测试数据集上检查模型的性能以确保它正在学习。deftest(dataloader,model,loss_fn):# 定义测试函数sizelen(dataloader.dataset)# 获取数据集的样本总数num_batcheslen(dataloader)# 获取批次总数model.eval()# 将模型设置为评估模式test_loss,correct0,0# 初始化测试损失和正确预测计数withtorch.no_grad():# 禁用梯度计算节省内存和计算forX,yindataloader:# 遍历测试数据加载器X,yX.to(device),y.to(device)# 将数据和标签移动到指定设备predmodel(X)# 前向传播得到模型预测test_lossloss_fn(pred,y).item()# 累加批次损失correct(pred.argmax(1)y).type(torch.float).sum().item()# 统计正确预测数test_loss/num_batches# 计算平均测试损失correct/size# 计算准确率print(fTest Error: \n Accuracy:{(100*correct):0.1f}%, Avg loss:{test_loss:8f}\n)# 打印测试结果训练过程在若干次迭代epoch中进行。在每个 epoch 中模型学习参数以做出更好的预测。我们在每个 epoch 打印模型的准确率和损失我们希望看到准确率随着每个 epoch 增加而损失减少。epochs5# 训练 5 个 epochfortinrange(epochs):# 遍历每个 epochprint(fEpoch{t1}\n-------------------------------)# 打印当前 epoch 编号train(train_dataloader,model,loss_fn,optimizer)# 执行训练循环test(test_dataloader,model,loss_fn)# 执行测试循环print(Done!)# 训练完成输出Epoch 1 ------------------------------- loss: 2.302590 [ 64/60000] loss: 2.291843 [ 6464/60000] loss: 2.274084 [12864/60000] loss: 2.267996 [19264/60000] loss: 2.248032 [25664/60000] loss: 2.235034 [32064/60000] loss: 2.235448 [38464/60000] loss: 2.206563 [44864/60000] loss: 2.203167 [51264/60000] loss: 2.173855 [57664/60000] Test Error: Accuracy: 48.5%, Avg loss: 2.165248 Epoch 2 ------------------------------- loss: 2.171659 [ 64/60000] loss: 2.168588 [ 6464/60000] loss: 2.110749 [12864/60000] loss: 2.124941 [19264/60000] loss: 2.070731 [25664/60000] loss: 2.026289 [32064/60000] loss: 2.046067 [38464/60000] loss: 1.972416 [44864/60000] loss: 1.973158 [51264/60000] loss: 1.901610 [57664/60000] Test Error: Accuracy: 59.3%, Avg loss: 1.900692 Epoch 3 ------------------------------- loss: 1.927220 [ 64/60000] loss: 1.909643 [ 6464/60000] loss: 1.786996 [12864/60000] loss: 1.823585 [19264/60000] loss: 1.710886 [25664/60000] loss: 1.668456 [32064/60000] loss: 1.684839 [38464/60000] loss: 1.584657 [44864/60000] loss: 1.603412 [51264/60000] loss: 1.505005 [57664/60000] Test Error: Accuracy: 60.7%, Avg loss: 1.522182 Epoch 4 ------------------------------- loss: 1.580342 [ 64/60000] loss: 1.556963 [ 6464/60000] loss: 1.401661 [12864/60000] loss: 1.472037 [19264/60000] loss: 1.356207 [25664/60000] loss: 1.352045 [32064/60000] loss: 1.366575 [38464/60000] loss: 1.284744 [44864/60000] loss: 1.322070 [51264/60000] loss: 1.234389 [57664/60000] Test Error: Accuracy: 62.9%, Avg loss: 1.253126 Epoch 5 ------------------------------- loss: 1.323655 [ 64/60000] loss: 1.310964 [ 6464/60000] loss: 1.143728 [12864/60000] loss: 1.248905 [19264/60000] loss: 1.131093 [25664/60000] loss: 1.151796 [32064/60000] loss: 1.175902 [38464/60000] loss: 1.103851 [44864/60000] loss: 1.148382 [51264/60000] loss: 1.078236 [57664/60000] Test Error: Accuracy: 64.5%, Avg loss: 1.088746 Done!保存模型Saving Models保存模型的常用方法是序列化内部状态字典包含模型参数。torch.save(model.state_dict(),model.pth)# 将模型参数状态字典保存到文件 model.pthprint(Saved PyTorch Model State to model.pth)# 打印保存成功提示输出Saved PyTorch Model State to model.pth加载模型Loading Models加载模型的过程包括重新创建模型结构并将状态字典加载到其中。modelNeuralNetwork().to(device)# 重新创建模型实例并移动到设备model.load_state_dict(torch.load(model.pth,weights_onlyTrue))# 从文件加载模型参数weights_onlyTrue 是安全最佳实践输出All keys matched successfully此模型现在可用于进行预测。classes[# 定义类别名称列表T-shirt/top,# 0: T恤Trouser,# 1: 裤子Pullover,# 2: 套衫Dress,# 3: 连衣裙Coat,# 4: 外套Sandal,# 5: 凉鞋Shirt,# 6: 衬衫Sneaker,# 7: 运动鞋Bag,# 8: 包Ankle boot,# 9: 踝靴]model.eval()# 将模型设置为评估模式x,ytest_data[0][0],test_data[0][1]# 获取测试数据集的第一张图像和标签withtorch.no_grad():# 禁用梯度计算xx.to(device)# 将图像移动到设备predmodel(x)# 模型预测predicted,actualclasses[pred[0].argmax(0)],classes[y]# 获取预测类别和真实类别print(fPredicted: {predicted}, Actual: {actual})# 打印预测结果和真实标签输出Predicted: Ankle boot, Actual: Ankle boot

相关新闻

别被忽悠了!诺尔诺达网站建设到底贵在哪?老程序员掏心窝子的大实话

别被忽悠了!诺尔诺达网站建设到底贵在哪?老程序员掏心窝子的大实话

那天半夜两点,我盯着电脑屏幕,眼珠子干得冒火。对面客户还在微信上狂轰滥炸:“怎么还没好?隔壁小王公司半天就搞定了,你们是不是在磨洋工?”我气得差点把键盘砸了。这年头,做诺尔诺达网站建设的人,真不容易。很多人以为建站就是找个模板套一下,点几下鼠标,完事收钱。…

发布时间:2026/7/10 23:14:45
拒绝套路,揭秘企业品牌网站建设我们的优势与真实成本

拒绝套路,揭秘企业品牌网站建设我们的优势与真实成本

别再信那些“几百块建站”的广告了,那是骗小白的。我在这行摸爬滚打十年,见过太多老板花了几万块做个模板站,结果打开速度慢得像蜗牛,百度蜘蛛爬都爬不动,更别提转化客户了。今天不聊虚的,直接掏心窝子说说,为什么我们做企业品牌网站建设我们的优势在于“懂生意”而不是…

发布时间:2026/7/10 23:14:40
宁波江东老地块改造实录:避开那些坑,才是真本事

宁波江东老地块改造实录:避开那些坑,才是真本事

本文关键词:宁波市江东区地块建设网站说实话,刚接手江东这块地的时候,心里是真没底。以前总觉得搞建设就是画图纸、打地基,等楼起起来就完事了。直到真踩进这片老街区,才发现事情没那么简单。江东这边,老房子多,地下管网复杂得像蜘蛛网,稍微不注意就能挖断光缆或者水管…

发布时间:2026/7/10 23:13:52
大同市网站建设避坑指南:别被低价忽悠,这3点才是核心

大同市网站建设避坑指南:别被低价忽悠,这3点才是核心

大同市网站建设怎么才不踩雷?这篇干货直接告诉你真相。看完能省下至少两万块的冤枉钱。我在大同做这行八年了,见过太多老板花大价钱搭了个“花瓶”。看着挺唬人,打开全是bug。客户留不住,搜索还排名靠后。今天不聊虚的,只说大实话。先说价格。很多人问,大同市网站建设多少…

发布时间:2026/7/11 0:05:51
拒绝割韭菜!揭秘真正能落地的医疗网站平台建设方案

拒绝割韭菜!揭秘真正能落地的医疗网站平台建设方案

很多院长和运营负责人头疼的痛点,我都懂。这篇内容不玩虚的,直接告诉你如何避开那些花里胡哨却毫无用处的坑,让你的医疗网站真正带来患者信任。看完这篇,你将掌握从架构设计到内容优化的全套实操逻辑,不再被外包公司忽悠。说实话,现在市面上所谓的“高端医疗网站”,我看…

发布时间:2026/7/11 0:05:27
做网站建设的销售薪水真相:别信画饼,只看提成和留存率

做网站建设的销售薪水真相:别信画饼,只看提成和留存率

你现在的工资,够还房贷吗?很多刚入行的朋友,看到招聘启事上写着“月薪过万,上不封顶”,眼睛就亮了。觉得只要肯干,就能买房买车。别天真了。在网站建设这行,底薪通常只有3000到5000块。这点钱,在一线城市连合租都勉强。真正决定你生活质量的是提成。但提成这东西,水深…

发布时间:2026/7/11 0:05:12
郑州市建设局网站办事太坑?老装修工掏心窝子分享:这几点不看准后悔

郑州市建设局网站办事太坑?老装修工掏心窝子分享:这几点不看准后悔

郑州市建设局网站这破玩意儿,真让人又爱又恨。想办证?想查资质?别去瞎转悠了,直接看这篇能帮你省下半个月的命。说真的,每次打开那个所谓的“郑州市建设局网站”或者现在的“郑州市住房和城乡建设局官网”,我这血压就往上飙。界面老旧得像上世纪的产物,搜索框跟摆设似的…

发布时间:2026/7/11 0:04:53
徐州人必看,徐州市建设局网站首页办事避坑指南

徐州人必看,徐州市建设局网站首页办事避坑指南

最近好多朋友问我,在徐州办建筑资质或者查工地进度,到底该去哪找官方渠道。别再去那些乱七八糟的第三方网站了,容易踩坑不说,还耽误事。最靠谱的还是直接去徐州市建设局网站首页。我在这行干了五年,见过太多人因为找错入口,白跑好几趟住建局。今天就把我总结的实操经验,…

发布时间:2026/7/11 0:04:53
别瞎折腾了!一流高职院校建设网站,得这么搞才有人看

别瞎折腾了!一流高职院校建设网站,得这么搞才有人看

做网站最怕啥?花大价钱建了个“花瓶”,看着挺气派,里头空荡荡,学生老师都不爱进。你是不是也遇到过这情况?学校领导拍板,要搞个高大上的平台。结果找外包公司,套个模板,完事。半年过去,访问量惨淡,连教务处通知都懒得发上面。这哪是建设网站,这是浪费钱啊。今天我就…

发布时间:2026/7/11 0:03:22
别瞎找了!稼禾建设集团网站到底长啥样?扒开内幕看真相

别瞎找了!稼禾建设集团网站到底长啥样?扒开内幕看真相

你是不是也在找那个传说中的稼禾建设集团网站?我也找过。真的,那种感觉太难受了。就像你在深夜饿得前胸贴后背,打开冰箱却发现里面空空如也。你想知道他们家到底接没接过什么大项目,想知道他们的资质有多硬,想看看那些高楼大厦背后有没有他们的名字。结果呢?搜出来的全是…

发布时间:2026/7/11 0:00:38
温江区建设局网站怎么查进度?新手避坑指南与真实操作细节

温江区建设局网站怎么查进度?新手避坑指南与真实操作细节

最近好多朋友私信我, 问温江区那边搞装修或者买房, 到底怎么查审批进度。 很多人第一反应就是去现场排队, 其实现在都数字化了, 大部分业务都能在温江区建设局网站搞定。 但这里头水挺深, 稍微不注意就容易踩坑。 今天我就结合这几年在温江跑工地的经验, 给大家捋一捋, …

发布时间:2026/7/11 0:00:41
上海最好网站建设公司怎么选?老站长掏心窝子的避坑指南

上海最好网站建设公司怎么选?老站长掏心窝子的避坑指南

本文关键词:上海最好网站建设公司说实话,在这个行当摸爬滚打这么多年,见过太多老板被坑得底裤都不剩。昨天有个做建材的朋友找我喝茶,一脸愁容。他说之前找了一家所谓的“高端”团队,花了八万块,结果做出来的网站跟十年前的模板似的,连个手机适配都搞不定。他问我,到底…

发布时间:2026/7/11 0:01:45
做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做个人信息管理网站建设,这3个坑我踩了七年,你千万别再跳

做了七年建站,见过太多老板花大钱买模板,最后发现根本没法用。特别是现在大家都讲究数据隐私,想搞个个人信息管理网站建设,结果越搞越乱。这篇文不整虚的,直接说怎么把这套系统落地,让你自己的数据真正听话。先说个真事儿。去年有个做自由职业的朋友找我,他说想建个网站…

发布时间:2026/7/10 15:55:18
杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站怎么查最新规划?老杨说点大实话

杨凌规划建设局网站你是不是也遇到过这种情况?想看看自家旁边要修路,还是建公园。翻遍了手机,搜出来的全是几年前的旧闻。或者好不容易找到个入口,页面加载慢得像蜗牛。心里那个急啊,真的,懂的人都懂。我是老杨,在杨凌混了十几年,跟这行打交道不少。今天不跟你扯那些虚…

发布时间:2026/7/9 15:43:42
杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

杭州网站建设 seo 避坑指南:别被那些只会套模板的忽悠了

昨天半夜两点,我还在改一个客户的后台,咖啡都凉透了。这哥们儿是做机械配件的,在余杭那边,找的前一家公司花了八千块做了个站,结果上线一个月,百度连个影子都没有。他急得给我打电话,说是不是被黑了。我让他把链接发过来,打开一看,好家伙,那代码乱得跟刚被猫抓过的毛…

发布时间:2026/7/9 16:54:10
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/9 15:45:02
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/10 18:05:06
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/10 16:48:50