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

杭州科技网站wordpress教程_博客吧

杭州科技网站,wordpress教程_博客吧,免费做app的网站有哪些,做拍卖网站怎么样PyTorch-基础 环境准备 CUDA Toolkit安装#xff08;核显跳过此步骤#xff09; CUDA Toolkit是NVIDIA的开发工具#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本#xff0c;如何去下载对应版本的Toolkit工…PyTorch-基础 环境准备 CUDA Toolkit安装核显跳过此步骤 CUDA Toolkit是NVIDIA的开发工具里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本如何去下载对应版本的Toolkit工具本人下载的是Toolkit 12.2 下载地址https://developer.nvidia.com/cuda-toolkit-archive 下载完毕后打开cuda_12.2.2_windows_network.exe这里会让你指定一个临时目录这个目录用于存放临时文件的安装Toolkit 成功后会自动卸载 注意临时目录不要和安装目录指定相同位置假如指定了相同位置后面是无法安装的 选择路径时可以切换到自定义的安装路径 路径最好和工具中一致参考路径D:\NVIDIA CUDA\NVIDIA GPU Computing Toolkit\CUDA\v版本号 安装完后后我们需要添加CUDA环境变量 安装完毕后通过nvcc -V测试是否安装成功 CUDNN安装核显跳过此步骤 Cudnn是NVIDIA提供的一个深度神经网络加速库它包含了一系列高性能的基本函数和算法用于加速深度学习任务的计算它可以与Cuda一起使用提供了针对深度学习任务的高效实现。 下载地址https://developer.nvidia.com/cudnn-downloads 选择对应CUDA版本下载这里下载压缩包 下载完毕后将压缩包解压将解压内容直接复制粘贴到CUDA安装目录下本人安装目录是D:\NVIDIA CUDA\NVIDIA GPU Computing Toolkit\CUDA\v12.1 粘贴完毕后打开命令行执行nvidia-smi看到如下内容表示安装成功 Anaconda创建虚拟环境 #创建一个名为pytorchpython版本3.8的虚拟环境 conda create -n pytroch2.3.0 python3.8 #切换到当前环境 conda activate pytroch2.3.0 #查看本机支持的CUDA版本核显跳过 nvidia-smi #安装pytorch #官网https://pytorch.org/get-started/locally/ #下载对应CUDA版本的pytorch独显电脑执行该命令 #如果与下载很慢可以分开下载 conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia #下载对应CUDA版本的pytorch核显电脑执行该命令 conda install pytorch torchvision torchaudio cpuonly -c pytorch测试PyTroch 在包都安装完毕后执行如下命令没有任何报错表示安装成功 #进入python命令行 python #引入torch import torch #测试cuda核显返回False独显返回True torch.cuda.is_available()编辑器选择 在开发过程中需要使用到2款编辑器分别是PyCharm和Jupyter PyCharm PyCharmhttps://www.jetbrains.com.cn/pycharm/download/ 安装完毕后再PyCharm中Settings中找到Python Interpreter并且选择Add Interpreter将Conda添加进来这样项目就可以选择指定Conda的环境运行 Jupyter 安装Anaconda时会顺便安装了Jupyter但是Jupyter默认是Base环境接下来我们需要在前面创建好的pytroch2.3.0环境下安装Jupyter #切换到pytroch2.3.0 conda activate pytroch2.3.0 #安装Jupyter conda install nb_conda #安装完毕, jupyter notebook启动成功后创建一个文件切换环境执行测试代码 常用类库 Dataset Pytroch提供Dataset用于存放数据集使用方式很简单编写一个类继承Dataset实现init、getitem、len方法即可简单使用Dataset以下就是一个Dataset的简单使用 from torch.utils.data import Dataset from PIL import Image import osclass MyData(Dataset):#构造函数def __init__(self,root_dir,label_dir):self.root_dir root_dirself.label_dir label_dir#文件路径self.path os.path.join(self.root_dir,self.label_dir)#图片列表self.img_path os.listdir(self.path)#获取图片下标 def __getitem__(self, item):img_name self.img_path[item]img_item_path os.path.join(self.root_dir,self.label_dir,img_name)img Image.open(img_item_path)label self.label_dirreturn img,label#获取长度def __len__(self):return len(self.img_path)root_dir E:\\Python-Project\\Torch-Demo\\dataset\\train #蚂蚁数据集 ants_label_dir ants_image ants_dataset MyData(root_dir,ants_label_dir) #蜜蜂数据集 bees_label_dir bees_image bees_dataset MyData(root_dir,bees_label_dir) #合并2个数据集 train_dataset ants_dataset bees_datasettransforms transforms是神经网络中一个非常重要的库它提供了将数据转换为Tensor类型数据Tensor包装了神经网络的数据参数如数据网络的数据格式、梯度、梯度方法等并且transforms包含了很多操作数据的库可以对Tensor数据进行各种修改 from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transformswriter SummaryWriter(logs)img_path data/train/ants_image/0013035.jpg img Image.open(img_path) #将图片转换为tensor类型 trans_totensor transforms.ToTensor() img_tensor trans_totensor(img) writer.add_image(ToTensor, img_tensor)#对tensor进行进行归一化减少不同图片的色彩的差值提升训练效果 #规划的计算公式 output[channel] (input[channel] - mean[channel]) / std[channel] print(img_tensor[0][0][0]) trans_norm transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) img_norm trans_norm(img_tensor) print(img_norm[0][0][0]) writer.add_image(Normalize, img_norm)#对PIL图片大小修改 trans_resize transforms.Resize((512, 512)) img_resize trans_resize(img) img_resize trans_totensor(img_resize) writer.add_image(Resize, img_resize)#对PIL图片进行整体缩放 trans_resize_2 transforms.Resize(512) trans_compose transforms.Compose([trans_resize_2,trans_totensor]) img_resize_2 trans_compose(img) writer.add_image(Resize, img_resize_2,1)#对PIL图片进行随机裁剪 trans_random transforms.RandomCrop((128,128)) trans_compose_2 transforms.Compose([trans_random,trans_totensor]) for i in range(10):img_crop trans_compose_2(img)writer.add_image(RandomCrop, img_crop,i)writer.close()tensorboard tensorboard提供训练可视化工具通过图标的方式可以跟踪实验中不同阶段下的指标用于对比 依赖安装 #安装tensorboard可视化工具 conda install tensorboard启动tensorboard #--logdir 指定读取的文件目录 #--port 指定服务启动的端口 tensorboard --logdirlogs --port6007简单使用案例 以下创建1个函数y2x并且将内容输出到tensorboard from torch.utils.tensorboard import SummaryWriter #指定日志生成的目录 writer SummaryWriter(logs) #往writer写入数据 #参数1图表名称 #参数2Y轴值 #参数3X轴值 for i in range(100):writer.add_scalar(y2x, 2 * i, i) #关闭流 writer.close()在项目目录下使用tensorboard --logdirlogs启动tensorboard 常见问题 多次重复执行时刷新tensorboard会发现图标很乱解决方法有2种 1、将logs下文件生成重新代码重新启动tensorboard 2、每次执行都创建一个新的logs文件将图标写入新logs文件下 Dataset下载与转换 结合Dataset和Transforms对数据集进行下载并且转换PyTorch提供了一些用于练习的数据集可以通过Dataset进行下载一下就是一个案例 import torchvision from torch.utils.tensorboard import SummaryWriter#定义一个转换操作对dataset中的数据集进行操作 dataset_transform torchvision.transforms.Compose([torchvision.transforms.ToTensor(), ])#训练数据集CIFAR10是PyTorch提供的一个数据集会自动去下载 #https://www.cs.toronto.edu/~kriz/cifar.html train_set torchvision.datasets.CIFAR10(root./dataset,trainTrue,transformdataset_transform,downloadTrue) #测试数据集 test_set torchvision.datasets.CIFAR10(root./dataset,trainFalse,transformdataset_transform,downloadTrue)#使用tensorboard显示数据集合显示前面10张 writer SummaryWriter(p10) for i in range(10):img,target test_set[i]writer.add_image(test_set,img,i)writer.close()DataLoader Dataset是数据集那么需要获取数据集的数据那么就需要用到DataLoaderDataLoader可以将数据集安装指定规则分批、打乱后重新组合成一批一批的数据 import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter#测试数据集 test_data torchvision.datasets.CIFAR10(root./dataset,trainFalse,transformtorchvision.transforms.ToTensor(),downloadTrue) #加载数据集batch_size4每获取4张数据为一组shuffleTrue乱序获取 #加载完毕后元组图片集合标签集合 test_loader DataLoader(datasettest_data,batch_size4,shuffleTrue,num_workers0,drop_lastFalse)#打印Dataloader writer SummaryWriter(dataloder) step 0 for data in test_loader:imgs,targets datawriter.add_images(test_data,imgs,step)step step 1 writer.close()使用tensorboard --logdirdataloder在控制台查看加载好的数据集 神经网络 PyTorch封装了很多神经网络的类库文档地址 https://pytorch.org/docs/stable/nn.html 卷积神经网络NN 卷积层 卷积神经网络具体的计算过程可以参考https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md 结合上图与参考地址中的动图案例可以总结出在计算过程中有几个重要参数 输入(二维数组)卷积核每次计算后移动的步长(stride)是否对图像边填充而增加图像大小(padding)输出(二维数组) import torch import torch.nn.functional as F #输入图像 input torch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1] ]) #卷积核 kernel torch.tensor([[1,2,1],[0,1,0],[2,1,0] ]) #尺寸切换 input torch.reshape(input,(1,1,5,5)) kernel torch.reshape(kernel,(1,1,3,3)) #使用卷积核对图像进行卷积卷积和在图像中滑动的步长1可获得一个3X3输出 output F.conv2d(input,kernel,stride1,padding0) print(output)#使用卷积核对图像进行卷积卷积和在图像中滑动的步长2可获得一个3X3输出 output2 F.conv2d(input,kernel,stride2,padding0) print(output2)#使用卷积核对图像进行卷积卷积和在图像中滑动的步长1对图像外面填充一圈0的数据图像将变成7X7可获得一个5X5输出 # [0, 0, 0, 0, 0, 0, 0] # [0, 1, 2, 0, 3, 1, 0] # [0, 0, 1, 2, 3, 1, 0] # [0, 1, 2, 1, 0, 0, 0] # [0, 5, 2, 3, 1, 1, 0] # [0, 2, 1, 0, 1, 1, 0] # [0, 0, 0, 0, 0, 0, 0] output3 F.conv2d(input,kernel,stride1,padding1) print(output3)案例 将PyTorch测试数据集CIFAR10下载下来利用Conv2d对数据集中的图片进行卷积卷积核大小为3x3步长为1输出6通道 import torch import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter#使用测试集训练以为训练集合数据太多了 dataset torchvision.datasets.CIFAR10(root./dataset, trainFalse, transformtorchvision.transforms.ToTensor(),downloadTrue) #加载数据 dataloader DataLoader(dataset,batch_size64) #定义一个训练模型 class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()#定义一个的卷积方法#参数1输入3个通道的数据图片又RBG 3个通道组成#参数2输出为6个通道的数据进行6次卷积计算结果集堆叠在一起#参数3卷积核大小3X3#参数4卷积核每次计算后移动步长1#参数5不对图像边进行填充self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size3,stride1,padding0)def forward(self, x):#对数据进行卷积x self.conv1(x)return xmy_model MyModel()writer SummaryWriter(./logs_conv2d) step 0 #计算DataLoader中的每一组数据 for data in dataloader:imgs,targets dataoutput my_model(imgs)#torch.Size([64, 3, 32, 32])# print(imgs.shape)#torch.Size([64, 6, 30, 30])# print(output.shape)writer.add_images(input,imgs,step)#由于6个通道在tensorboard无法显示强行转换为3个通道参数1填写-1会根据后面的数自动推算output torch.reshape(output,(-1,3,30,30))writer.add_images(output,output,step)step step 1writer.close()最大池化核心层 最大池化的目的是将图像中的特质保留将图像缩小比如一张5x5的图片池化后变成2x2的这样可以缩小图片提高计算过程 最大池化核在每一片被池化核覆盖的区域内获取一个最大的值作为结果写入到结果集中默认没获取完后池化核移动步长等于池化核大小 Ceil_modelTrue池化核覆盖区域超出图像范围时也要获取最大值Ceil_modelFalse只获取池化核覆盖区域在图像范围内的最大值超出范围的值丢弃 案例 将PyTorch测试数据集CIFAR10下载下来对数据集进行池化 import torchvision from torch import nn from torch.nn import MaxPool2d from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter #使用测试集训练以为训练集合数据太多了 dataset torchvision.datasets.CIFAR10(root./dataset, trainFalse, downloadTrue, transformtorchvision.transforms.ToTensor()) #加载数据 dataloader DataLoader(dataset,batch_size64) #定义一个训练模型 class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()#定义最大池化的规则#参数1池化核3x3#参数2磁化核溢出部分是否保留self.maxpool1 MaxPool2d(kernel_size3,ceil_modeFalse)def forward(self, input):#对数据进行池化output self.maxpool1(input)return outputmy_model MyModel()writer SummaryWriter(./logs_maxpool) step 0 #计算DataLoader中的每一组数据 for data in dataloader:imgs,targets datawriter.add_images(input,imgs,step)output my_model(imgs)writer.add_images(output,output,step)step 1writer.close()非线性激活 默认的图像都是线性的训练出来的模型就很死版对数据集进行非线性集合后训练模型可以训练出符合各种曲线各种特征的模型 import torchvision from torch import nn from torch.nn import ReLU, Sigmoid from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterdataset torchvision.datasets.CIFAR10(root./dataset, trainFalse, downloadTrue, transformtorchvision.transforms.ToTensor()) #加载数据 dataloader DataLoader(dataset,batch_size64) class MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()#最简单的非线性激活把数据中负数变为0图像场景下不明显self.relu1 ReLU()#Sigmoid函数计算输出值介于0-1之间self.sigmoid1 Sigmoid()def forward(self, input):output self.sigmoid1(input)return outputmy_model MyModel()writer SummaryWriter(./logs_relu) step 0 #计算DataLoader中的每一组数据 for data in dataloader:imgs,targets dataoutput my_model(imgs)writer.add_images(input,imgs,step)writer.add_images(output,output,step)step step 1writer.close()网络模型搭建 PyTorch中的模型 PyTorch中提供了很多以实现的模型有的时候直接使用PyTorch的模型就可完成我们的需求不需要直接去编写模型官方文档中包含了完整的实例例如图像处理模型地址如下https://pytorch.org/vision/stable/models.html#classification 基于VGG16修改模型 在很多的需求的实现过程都拿vgg16作为前置的模型在vgg16的基础上进行修改以下就是基于vgg16模型修改适应CIFAR10数据集 import torchvision.datasets from torch import nndataset torchvision.datasets.CIFAR10(root./dataset, trainFalse, transformtorchvision.transforms.ToTensor(),downloadTrue)#获取一个已经训练过的vgg16模型这会下载一个包 vgg16_true torchvision.models.vgg16(pretrainedTrue) #获取一个没有训练过的vgg16模型 vgg16_false torchvision.models.vgg16(pretrainedFalse) #打印vgg16模型 print(vgg16_true)#vgg16默认是输出1000个结果CIFAR10数据集结果只有10类让vgg16模型适应CIFAR10操作方式有2种 #1. 在vgg16基础上添加一层线性层 vgg16_true.classifier.add_module(add_linear, nn.Linear(1000, 10)) print(vgg16_true) #2. 直接修改第六层的逻辑 vgg16_false.classifier[6] nn.Linear(4096, 10) print(vgg16_false)模型的保存与加载 import torch import torchvision#获取一个没有训练过的vgg16模型 vgg16 torchvision.models.vgg16(pretrainedFalse) #保存方式1保存模型结构参数文件 torch.save(vgg16,vgg16_method1.pth) #保存方式2保存模型的参数官方推荐 torch.save(vgg16.state_dict(),vgg16_method2.pth)#加载模型结构参数文件方式1加载时要有该网络模型的对象才能加载成功 model torch.load(vgg16_method1.pth) print(model) #加载模型的参数官方推荐 dict torch.load(vgg16_method2.pth) vgg16 torchvision.models.vgg16(pretrainedFalse) vgg16.load_state_dict(dict) print(model)CIFAR10分类模型案例 编写一段网络模型对CIFAR10中的数据集进行分类最后输入一张图片得到分类模型的搭建流程图像 import torchvision from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriterfrom model import * #定义训练的设备 device torch.device(cuda:0 if torch.cuda.is_available() else cpu) #准备数据集 train_data torchvision.datasets.CIFAR10(root./dataset, trainTrue, downloadTrue,transformtorchvision.transforms.ToTensor()) test_data torchvision.datasets.CIFAR10(root./dataset, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor())#获得数据集的长度 train_data_size len(train_data) test_data_size len(test_data) print(训练数据集的长度为{}.format(train_data_size)) print(测试数据集的长度为{}.format(test_data_size))#利用DataLoader加载数据集 train_dataloader DataLoader(train_data, batch_size64) test_dataloader DataLoader(test_data, batch_size64)#创建网络模型 my_model MyModel() my_model my_model.to(device) #使用GPU训练 #损失函数 loss_fn nn.CrossEntropyLoss() loss_fn loss_fn.to(device) #使用GPU训练 #优化器 learning_rate 0.001 optimizer torch.optim.SGD(my_model.parameters(), learning_rate)#设置训练网络的参数 total_train_step 0 #训练的次数 total_test_step 0 #测试的测试 epochs 10 #训练轮数#添加tensorboard writer SummaryWriter(./logs_train)for i in range(epochs):print(--------------------第{}轮训练开始--------------------.format(i1))#训练集数据my_model.train()for data in train_dataloader:imgs,targets dataimgs imgs.to(device) #使用GPU训练targets targets.to(device) #使用GPU训练outputs my_model(imgs)#计算损失函数loss loss_fn(outputs, targets)#使用优化器优化模型optimizer.zero_grad()loss.backward()optimizer.step()#记录训练次数total_train_step 1if total_train_step % 100 0: #每逢100才打印print(训练次数{}Loss{}.format(total_train_step, loss.item()))writer.add_scalar(train_loss,loss.item(),total_train_step)#测试步骤开始my_model.eval()total_test_loss 0total_accuracy 0with torch.no_grad():for data in test_dataloader:imgs,targets dataimgs imgs.to(device) # 使用GPU训练targets targets.to(device) # 使用GPU训练outputs my_model(imgs)loss loss_fn(outputs, targets)total_test_loss loss.item()accuracy (outputs.argmax(1) targets).sum()total_accuracy accuracy.item()print(整体测试集上的Loss{}.format(total_test_loss))print(整体测试集上的准确率{}.format(total_accuracy/test_data_size))writer.add_scalar(test_loss, total_test_loss, total_test_step)writer.add_scalar(test_accuracy, total_accuracy/test_data_size, total_test_step)total_test_step 1#保存每一轮的训练结果torch.save(my_model,./pth/my_model_{}.pth.format(i))print(模型已保存)writer.close() 编写测试程序加载训练好的模型识别
http://www.yayakq.cn/news/1253/

相关文章:

  • 做网站下载哪个软件网站域名 文件夹
  • 公会网站建设wordpress样式错乱
  • 建企业门户网站公司网站建设付款分录
  • 房屋室内设计专业网站优化公司排名
  • 东莞网站建设及外包偃师网站
  • 安康网站建设小程序哈尔滨网站优化公司
  • 网站建设与管理实践报告茄子直播
  • 网站开发项目方案烟台企业网站建站模板
  • wordpress便宜主题搜索引擎优化与推广技术
  • 建设工程信息发布网站网站备案幕布大小
  • 搜索网站开发背景付费恶意点击软件
  • 汉中专业网站建设公司全网营销的四大优势
  • 济南微信网站WordPress页码总数
  • 佛山网站制作网址网站建设管理视频
  • 深圳 建网站网站用图片做背景图片
  • 温州营销网站公司哪家好苏州老字号企业官方的网站策划书
  • 江苏国龙翔建设有限公司网站备案信息查询
  • 用asp.net做网站的书苏州手机app开发公司
  • 做网站是什么意思网站建设费计入无形资产
  • 网站如何做等级保护工厂弄个网站做外贸如何
  • wordpress给公司建站百度怎么发布广告
  • 建设网站的源代码自适应主题 wordpress
  • 微网站建设图片学院网站建设情况总结
  • 开源网站有哪些网站套站
  • 深圳做网站公司哪家比较好潍坊建设网站
  • 做网站首页文字排版技巧百度seo优化包含哪几项
  • 受欢迎的集团网站建设网站页脚信息
  • 上海网站设计哪家好发稿媒体平台
  • 关于网站可信备案五金配件店 东莞网站建设
  • 二级网站有什么好处wordpress 分页按钮