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

申请网站建设经费同城分类信息网站

申请网站建设经费,同城分类信息网站,东乌珠穆沁旗网站建设,wordpress备份 ftp张量和梯度 我们将深入探讨使用 PyTorch 构建自己的神经网络必须了解的 2 个基本概念#xff1a;张量和梯度。 张量 张量是 PyTorch 中的中央数据单元。它们是类似于数组的数据结构#xff0c;在功能和属性方面与 Numpy 数组非常相似。它们之间最重要的区别是 PyTorch 张量… 张量和梯度 我们将深入探讨使用 PyTorch 构建自己的神经网络必须了解的 2 个基本概念张量和梯度。 张量 张量是 PyTorch 中的中央数据单元。它们是类似于数组的数据结构在功能和属性方面与 Numpy 数组非常相似。它们之间最重要的区别是 PyTorch 张量可以在 GPU 的设备上运行以加速计算。 # 使用Tensor对象创建了一个 3x3 形状的未初始化张量。 import torch tensor_uninitialized torch.Tensor(3, 3) tensor_uninitializedtensor([[1.7676e-35, 0.0000e00, 3.9236e-44],[0.0000e00, nan, 0.0000e00],[1.3733e-14, 1.2102e25, 1.6992e-07]])# 我们还可以创建用零、一或随机值填充的张量。 tensor_rand torch.rand(3, 3) tensor_randtensor([[0.6398, 0.3471, 0.6329],[0.4517, 0.2253, 0.8022],[0.9537, 0.1698, 0.5718]])就像 Numpy 数组一样PyTorch 允许我们在张量之间执行数学运算同样的 Numpy 数组中的其他常见操作如索引和切片也可以使用 PyTorch 中的张量来实现。 # 数学运算 x torch.Tensor([[1, 2, 3],[4, 5, 6]]) tensor_add torch.add(x, x)tensor([[ 2., 4., 6.],[ 8., 10., 12.]])梯度 假设有 2 个参数 a 和 b 梯度是一个参数相对于另一个参数的偏导数。导数告诉你当你稍微改变其他一些量时给定量会发生多少变化。在神经网络中梯度是损失函数相对于模型权重的偏导数。我们只想找到带来损失函数梯度最低的权重。 PyTorch 使用torch库中的Autograd包来跟踪张量上的操作。 # 01. 默认情况下张量没有关联的梯度。 tensor torch.Tensor([[1, 2, 3],[4, 5, 6]]) tensor.requires_gradFalse# 02. 可以通过调用requires_grad_函数在张量上启用跟踪历史记录。 tensor.requires_grad_()tensor([[1., 2., 3.],[4., 5., 6.]], requires_gradTrue)# 03. 但是目前该 Tensor 还没有梯度 print(tensor.grad)None# 04. 现在让我们创建一个等于前一个张量中元素均值的新张量以计算张量相对于新张量的梯度。 mean_tensor tensor.mean() mean_tensortensor(3.5000, grad_fnMeanBackward0)# 05. 要计算梯度我们需要显式执行调用backward()函数的反向传播。 mean_tensor.backward() print(tensor.grad)tensor([[0.1667, 0.1667, 0.1667],[0.1667, 0.1667, 0.1667]])使用 PyTorch 的神经网络 我们可以将神经网络定义为扩展 torch.nn.Module 类的 Python 类。在这个类中我们必须定义 2 个基本方法 init()是类的构造函数。在这里我们必须定义构成我们网络的层。forward()是我们定义网络结构以及各层连接方式的地方。这个函数接受一个输入代表模型将被训练的特征。我将向你展示如何构建可用于分类问题的简单卷积神经网络并在 MNIST 数据集上训练它。 首先我们必须导入torch和我们需要的所有模块。可以创建我们的模型了。 import torch from torch import nn import torch.nn.functional as F import numpy as np# CNN 由 2 个卷积层组成后面是一个全局平均池化层。最后我们有 2 个全连接层和一个softmax来获得最终的输出概率。class My_CNN(nn.Module):def __init__(self):super(My_CNN, self).__init__()self.conv1 nn.Conv2d(1, 64, kernel_size(3, 3), padding1)self.conv2 nn.Conv2d(64, 64, kernel_size(3, 3), padding1)self.avg_pool nn.AvgPool2d(28)self.fc1 nn.Linear(64, 64)self.fc2 nn.Linear(64, 10)def forward(self, x):x F.relu(self.conv1(x))x F.relu(self.conv2(x))x self.avg_pool(x)x x.view(-1, 64)x F.relu(self.fc1(x))x self.fc2(x)x F.softmax(x)return x其次加载数据集直接从 PyTorch 检索 MNIST 数据集并使用 PyTorch 实用程序将数据集拆分为训练集和验证集。 from torchvision.datasets import MNIST from torch.utils.data import DataLoader from torch.utils.data.sampler import SubsetRandomSampler mnist MNIST(data, downloadTrue, trainTrue) ## create training and validation split split int(0.8 * len(mnist)) index_list list(range(len(mnist))) train_idx, valid_idx index_list[:split], index_list[split:] ## create sampler objects using SubsetRandomSampler train SubsetRandomSampler(train_idx) valid SubsetRandomSampler(valid_idx)# 使用DataLoader创建迭代器对象它提供了使用多处理 worker 并行批处理、随机播放和加载数据的能力。 train_loader DataLoader(mnist, batch_size256, samplertrain) valid_loader DataLoader(mnist, batch_size256, samplervalid) 现在我们拥有了开始训练模型的所有要素。然后再定义损失函数和优化器Adam将用作优化器交叉熵用作损失函数。 model My_CNN() optimizer torch.optim.Adam(model.parameters(), lr0.001) loss_function nn.CrossEntropyLoss() 最后开始训练所有 PyTorch 训练循环都将经过每个 epoch 和每个DataPoint在训练DataLoader 对象中。 epochs 10 for epoch in range(epochs):train_loss, valid_loss [], []for data, target in train_loader:# forward propagation outputs model(data)# loss calculationloss loss_function(outputs, target)# backward propagationoptimizer.zero_grad()loss.backward()# weights optimizationoptimizer.step()train_loss.append(loss.item())for data, target in valid_loader:outputs model(data)loss los_function(outputs, target)valid_loss.append(loss.item())print(Epoch: {}, training loss: {}, validation loss: {}.format(epoch, np.mean(train_loss), np.mean(valid_loss)))在验证阶段我们必须像在训练阶段所做的那样循环验证集中的数据。不同之处在于我们不需要对梯度进行反向传播。 with torch.no_grad():correct 0total 0for data, target in valid_loader:outputs model(images)_, predicted torch.max(outputs.data, 1)total labels.size(0)correct (predicted labels).sum().item() print(Validation set Accuracy: {} %.format(100 * correct / total)) 就是这样现在你已准备好构建自己的神经网络。你可以尝试通过增加模型复杂性向网络添加更多层来获得更好的性能。 请关注博主一起玩转人工智能及深度学习。
http://www.ho-use.cn/article/10814376.html

相关文章:

  • 涉县专业做网站塘厦在哪里
  • 网站域名授权怎么做怎样做的英文网站
  • 花卉网站建设规划书做网站买那种服务器好
  • 怎样搭建网站怎么弄微信小程序卖东西
  • 找合伙做网站的做电影电视剧网站推广
  • 重庆网站建设模板服务邢台网站制作的地方
  • 湖南省建设银行网站6广州美容网站建设
  • 跨国网站重庆永川网站建设公司
  • 什么是企业营销型网站?怎么学室内装修设计软件
  • 滨州网站建设 远洋科技网页设计模板图片html
  • 广东建设官方网站wordpress编辑文章
  • wordpress改网站地址电子商务网站推广策略论文
  • 防城港网站设计楼市最新消息:2023年房价走势
  • 手机版网站做一下多少钱wordpress 视频网站
  • 自贡建设投资有限公司网站国家企业网官网查询
  • 网站后台分模块有个人做网站的吗
  • 专业做模具钢的网站电商企业营销推广
  • 石家庄百度推广家庄网站建设企业网站制作正规公司
  • 网站开发项目报价单个人中心页面设计html
  • 信息化建设网站建设网站教程
  • 中型网站 收益如何做直接打开网站的二维码
  • 手机网站登陆模板常用网站字体
  • 公建设计网站宁波seo公司哪家好
  • 中国建设银行遵义市分行网站推广方法
  • c2c网站的功能seo赚钱方法大揭秘
  • 小型网站开发成本哈尔滨电子政务网站建设
  • 关于com的网站小说网站自动采集
  • 网站建设在哪里可以筹集素材慈溪专业做网站公司
  • 网站建设进度控制wordpress右下角广告
  • 做网站和推广公司做网站的如何增加电话量