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

做百度网站每年的费用多少合适wordpress去除手机版

做百度网站每年的费用多少合适,wordpress去除手机版,百度com百度一下你,中国服务器龙头企业本系列为《动手学深度学习》学习笔记 书籍链接#xff1a;动手学深度学习 笔记是从第四章开始#xff0c;前面三章为基础知道#xff0c;有需要的可以自己去看看 关于本系列笔记#xff1a; 书里为了让读者更好的理解#xff0c;有大篇幅的描述性的文字#xff0c;内容很…本系列为《动手学深度学习》学习笔记 书籍链接动手学深度学习 笔记是从第四章开始前面三章为基础知道有需要的可以自己去看看 关于本系列笔记 书里为了让读者更好的理解有大篇幅的描述性的文字内容很多笔记只保留主要内容同时也是对之前知识的查漏补缺 5. 深度学习计算 5.1 层和块 图5.1.1: 多个层被组合成块形成更大的模型 下面的代码生成一个网络具有256个单元和ReLU激活函数的全连接隐藏层然后是一个具有10个隐藏单元且不带激活函数的全连接 输出层。 import torch from torch import nn from torch.nn import functional as F net nn.Sequential(nn.Linear(20, 256), nn.ReLU(), nn.Linear(256, 10)) X torch.rand(2, 20) net(X)简而言 之nn.Sequential定义了一种特殊的Module即在PyTorch中表示一个块的类它维护了一个由Module组成 的有序列表。 这个前 向传播函数非常简单它将列表中的每个块连接在一起将每个块的输出作为下一个块的输入。 5.1.1 自定义块 从零开始编写一个块它包含一个多层感知机其具有256个隐藏单元的隐藏层和一 个10维输出层。 class MLP(nn.Module):# 用模型参数声明层。这里我们声明两个全连接的层def __init__(self):# 调用MLP的父类Module的构造函数来执行必要的初始化。# 这样在类实例化时也可以指定其他函数参数例如模型参数params稍后将介绍super().__init__()self.hidden nn.Linear(20, 256) # 隐藏层self.out nn.Linear(256, 10) # 输出层# 定义模型的前向传播即如何根据输入X返回所需的模型输出def forward(self, X):# 注意这里我们使用ReLU的函数版本其在nn.functional模块中定义。return self.out(F.relu(self.hidden(X)))首先 我们定制的__init__函数通过super().init()调用父类的__init__函数省去了重复编写模版代码的痛苦。然后我们实例化两个全连接层分别为self.hidden和self.out。注意除非我们实现一个新的运算符 否则我们不必担心反向传播函数或参数初始化系统将自动生成这些。 5.1.2 顺序块 看看Sequential类是如何工作的   为了构建我们自己的简化的MySequential我们只需要定义两个关键函数 将块逐个追加到列表中的函数前向传播函数用于将输入按追加块的顺序传递给块组成的“链条”。 class MySequential(nn.Module):def __init__(self, *args):super().__init__()for idx, module in enumerate(args):# 这里module是Module子类的一个实例。我们把它保存在Module类的成员# 变量_modules中。_module的类型是OrderedDictself._modules[str(idx)] moduledef forward(self, X):# OrderedDict保证了按照成员添加的顺序遍历它们for block in self._modules.values():X block(X)return X__init__函数将每个模块逐个添加到有序字典_modules中。 为什么每个Module都有一 个_modules属性 为什么我们使用它而不是自己定义一个Python列表 . 简而言之_modules的主要优点是在模块的参数初始化过程中系统知道在_modules字典中查找需要初始化参数的子块。 5.1.3 在前向传播函数中执行代码 有时我们可能希望合并 既不是上一层的结果也不是可更新参数的项我们称之为常数参数constant parameter。 例如我们需要一个计算函数 f ( x , w ) c ⋅ w ⊤ x f(x, w) c · w^{⊤}x f(x,w)c⋅w⊤x的层其中x是输入 w w w是参数 c c c是某个在优化过程中没有更新的指定常量。因此我们实现了一个FixedHiddenMLP类如下所示 class FixedHiddenMLP(nn.Module):def __init__(self):super().__init__()# 不计算梯度的随机权重参数。因此其在训练期间保持不变self.rand_weight torch.rand((20, 20), requires_gradFalse)self.linear nn.Linear(20, 20)def forward(self, X):X self.linear(X)# 使用创建的常量参数以及relu和mm函数X F.relu(torch.mm(X, self.rand_weight) 1)# 复用全连接层。这相当于两个全连接层共享参数X self.linear(X)# 控制流while X.abs().sum() 1:X / 2return X.sum()其中权重self.rand_weight在实例化时被随机初始化之后为常量。这个权重不是一个模型参数因此它不会被反向传播更新。 5.2 参数管理 在选择了架构并设置了超参数后我们就进入了训练阶段。 此时我们的目标是找到使损失函数最小化的模型参数值。经过训练后我们将需要使用这些参数来做出未来的预测。此外有时我们希望提取参数以便在其他环境中复用它们将模型保存下来以便它可以在其他软件中执行或者为了获得科学的理解而进行检查。 本节我们将介绍以下内容 访问参数用于调试、诊断和可视化参数初始化在不同模型组件间共享参数。 5.2.1 参数访问 从已有模型中访问参数。当通过Sequential类定义模型时可以通过索引来访问模型的任意层。 如下所示我们可以检查第二个全连接层的参数。 print(net[2].state_dict())OrderedDict([(weight, tensor([[-0.0427, -0.2939, -0.1894, 0.0220, -0.1709, -0.1522, -0.0334, -0.2263]])), (bias, tensor([0.0887]))])输出的结果 首先这个全连接层包含两个参数分别是该层的权重和偏置。两者都存储为单精度浮点数float32。 注意参数名称允许唯一标识每个参数即使在包含数百个层的网络中也是如此。 目标参数 访问底层的数值从第二个全连接层即第三个神经网络层提取偏置提取后返回的是一个参数类实例并进一步访问该参数的值。 print(type(net[2].bias)) print(net[2].bias) print(net[2].bias.data)参数是复合的对象包含值、梯度和额外信息。 除了值之外我们还可以访问每个参数的梯度。在上面这个网络中由于我们还没有调用反向传播所以参数的梯度处于初始状态。 一次性访问所有参数 当我们需要对所有参数执行操作时逐个访问它们可能会很麻烦。当我们处理更复杂的块例如嵌套块 时情况可能会变得特别复杂因为我们需要递归整个树来提取每个子块的参数。下面我们将通过演示来 比较访问第一个全连接层的参数和访问所有层。 print(*[(name, param.shape) for name, param in net[0].named_parameters()]) # (weight, torch.Size([8, 4])) (bias, torch.Size([8]))print(*[(name, param.shape) for name, param in net.named_parameters()]) #(0.weight, torch.Size([8, 4])) (0.bias, torch.Size([8])) #(2.weight, torch.Size([1, 8])) (2.bias, torch.Size([1]))这为我们提供了另一种访问网络参数的方式如下所示。 net.state_dict()[2.bias].data # tensor([0.0887])从嵌套块收集参数 如果将多个块相互嵌套参数命名约定是如何工作的 def block1():return nn.Sequential(nn.Linear(4, 8), nn.ReLU(),nn.Linear(8, 4), nn.ReLU())def block2():net nn.Sequential()for i in range(4):# 在这里嵌套net.add_module(fblock {i}, block1())return netrgnet nn.Sequential(block2(), nn.Linear(4, 1)) rgnet(X)print(rgnet)Sequential( (0): Sequential((block 0): Sequential((0): Linear(in_features4, out_features8, biasTrue)(1): ReLU()(2): Linear(in_features8, out_features4, biasTrue)(3): ReLU())(block 1): Sequential((0): Linear(in_features4, out_features8, biasTrue)(1): ReLU()(2): Linear(in_features8, out_features4, biasTrue)(3): ReLU())(block 2): Sequential((0): Linear(in_features4, out_features8, biasTrue)(1): ReLU()(2): Linear(in_features8, out_features4, biasTrue)(3): ReLU())(block 3): Sequential((0): Linear(in_features4, out_features8, biasTrue)(1): ReLU()(2): Linear(in_features8, out_features4, biasTrue)(3): ReLU())) (1): Linear(in_features4, out_features1, biasTrue))rgnet[0][1][0].bias.data # tensor([ 0.1999, -0.4073, -0.1200, -0.2033, -0.1573, 0.3546, -0.2141, -0.2483])5.2.2 参数初始化 默认情况下PyTorch会根据一个范围均匀地初始化权重和偏置矩阵这个范围是根据输入和输出维度计算 出的。 PyTorch的nn.init模块提供了多种预置初始化方法 内置初始化 例1将所有权重参数初始化为标准差为0.01的高斯随机变量且将偏置参数设置为0。 def init_normal(m):if type(m) nn.Linear:nn.init.normal_(m.weight, mean0, std0.01)nn.init.zeros_(m.bias) net.apply(init_normal) net[0].weight.data[0], net[0].bias.data[0]例2将所有参数初始化为给定的常数比如初始化为1。 def init_constant(m):if type(m) nn.Linear:nn.init.constant_(m.weight, 1)nn.init.zeros_(m.bias)net.apply(init_constant)net[0].weight.data[0], net[0].bias.data[0]例3使用Xavier初始化方法初始化第一个神经网络层然后将第三个神经网络层初始化为常量值42。 def init_xavier(m):if type(m) nn.Linear:nn.init.xavier_uniform_(m.weight)def init_42(m):if type(m) nn.Linear:nn.init.constant_(m.weight, 42)net[0].apply(init_xavier) net[2].apply(init_42) print(net[0].weight.data[0]) print(net[2].weight.data)5.2.3 参数绑定 有时希望在多个层间共享参数我们可以定义一个稠密层然后使用它的参数来设置另一个层的参数。 # 我们需要给共享层一个名称以便可以引用它的参数 shared nn.Linear(8, 8) net nn.Sequential(nn.Linear(4, 8), nn.ReLU(),shared, nn.ReLU(),shared, nn.ReLU(),nn.Linear(8, 1)) net(X) # 检查参数是否相同 print(net[2].weight.data[0] net[4].weight.data[0]) net[2].weight.data[0, 0] 100 # 确保它们实际上是同一个对象而不只是有相同的值 print(net[2].weight.data[0] net[4].weight.data[0])这个例子表明第三个和第五个神经网络层的参数是绑定的实际上是同一个对象。它们不仅值相等而且由相同的张量表示。因此如果我们改变其中一个参数另一个参数也会改变。 当参数绑定时梯度会发生什么情况 答案是由于模型参数包含梯度因此在反向传播期间第二个隐藏层即第三个神经网络层和第三个隐藏层即第五个神经网络层的梯度会加在一起。 5.3 延后初始化 到目前为止我们忽略了建立网络时需要做的以下这些事情 定义了网络架构但没有指定输入维度。添加层时没有指定前一层的输出维度。在初始化参数时甚至没有足够的信息来确定模型应该包含多少参数。 深度学习框架无法判断网络的输入维度是什么。这里的诀窍是框架的延后初始化defers initialization即直到数据第一次通过模型传递时框架才会动态地推断出每个层的大小。 5.3.1 实例化网络 首先实例化一个多层感知机。 此时因为输入维数是未知的所以网络不可能知道输入层权重的维数。因此框架尚未初始化任何参数。 接下来让将数据通过网络最终使框架初始化参数。 一旦知道输入维数是20框架可以通过代入值20来识别第一层权重矩阵的形状。识别出第一层的形状后框架处理第二层依此类推直到所有形状都已知为止。 注意在这种情况下只有第一层需要延迟初始化但是框架仍是按顺序初始化的。等到知道了所有的参数形状框架就可以初始化参数。 5.4 自定义层 深度学习成功背后的一个因素是神经网络的灵活性可以用创造性的方式组合不同的层从而设计出适用于各种任务的架构。 5.4.1 不带参数的层 首先构造一个没有任何参数的自定义层。 下面的CenteredLayer类要从其输入中减去均值。要构建它我们只需继承基础层类并实现前向传播功能。 import torch import torch.nn.functional as F from torch import nnclass CenteredLayer(nn.Module):def __init__(self):super().__init__()def forward(self, X):return X - X.mean()验证 layer CenteredLayer() layer(torch.FloatTensor([1, 2, 3, 4, 5])) # tensor([-2., -1., 0., 1., 2.])net nn.Sequential(nn.Linear(8, 128), CenteredLayer()) Y net(torch.rand(4, 8)) Y.mean() # tensor(7.4506e-09, grad_fnMeanBackward0)5.4.2 带参数的层 实现自定义版本的全连接层。该层需要两个参数一个用于表示权重另一个用于表示偏置项。 在此实现中使用修正线性单元作为激活函数。该层需要输入参数in_units和units分别表示输入数和输出数。 class MyLinear(nn.Module):def __init__(self, in_units, units):super().__init__()self.weight nn.Parameter(torch.randn(in_units, units))self.bias nn.Parameter(torch.randn(units,))def forward(self, X):linear torch.matmul(X, self.weight.data) self.bias.datareturn F.relu(linear)实例化MyLinear类并访问其模型参数。 linear MyLinear(5, 3) linear.weight #Parameter containing: #tensor([[ 0.1775, -1.4539, 0.3972],#[-0.1339, 0.5273, 1.3041],#[-0.3327, -0.2337, -0.6334],#[ 1.2076, -0.3937, 0.6851],#[-0.4716, 0.0894, -0.9195]], requires_gradTrue)5.5 读写文件 5.5.1 加载和保存张量 import torch from torch import nn from torch.nn import functional as Fx torch.arange(4) torch.save(x, x-file) # 保存x2 torch.load(x-file) # 读取以写入或读取从字符串映射到张量的字典。 mydict {x: x, y: y} torch.save(mydict, mydict) mydict2 torch.load(mydict) mydict25.5.2 加载和保存模型参数 class MLP(nn.Module):def __init__(self):super().__init__()self.hidden nn.Linear(20, 256)self.output nn.Linear(256, 10)def forward(self, x):return self.output(F.relu(self.hidden(x)))net MLP() X torch.randn(size(2, 20)) Y net(X)将模型的参数存储在一个叫做“mlp.params”的文件中。 torch.save(net.state_dict(), mlp.params)为了恢复模型我们实例化了原始多层感知机模型的一个备份。 这里我们不需要随机初始化模型参数而是直接读取文件中存储的参数。 clone MLP() clone.load_state_dict(torch.load(mlp.params)) clone.eval()5.6 GPU 使用nvidia-smi命令查看显卡信息。 !nvidia-smi5.6.1 计算设备 指定用于存储和计算的设备如CPU和GPU。默认情况下张量是在内存中创建的然后使用CPU计算它。 应该注意的是 cpu设备意味着所有物理CPU和内存这意味着PyTorch的计算将尝试使用所有CPU核心。然而gpu设备只代表一个卡和相应的显存。如果有多个GPU我们使用torch.device(f’cuda:{i}) 来表示第i块GPUi从0开始。另外cuda:0和cuda是等价的。 import torch from torch import nn torch.device(cpu) torch.device(cuda) torch.device(cuda:1)查询可用gpu的数量。 torch.cuda.device_count()在不存在所需所有GPU的情况下运行代码。 def try_gpu(i0): #save如果存在则返回gpu(i)否则返回cpu()if torch.cuda.device_count() i 1:return torch.device(fcuda:{i})return torch.device(cpu)def try_all_gpus(): #save返回所有可用的GPU如果没有GPU则返回[cpu(),]devices [torch.device(fcuda:{i})for i in range(torch.cuda.device_count())]return devices if devices else [torch.device(cpu)] try_gpu()try_gpu(10)try_all_gpus()5.6.2 张量与GPU 查询张量所在的设备。默认情况下张量是在CPU上创建的。 x torch.tensor([1, 2, 3]) x.device # device(typecpu)需要注意的是无论何时我们要对多个项进行操作它们都必须在同一个设备上。 例如如果我们对两个张量求和我们需要确保两个张量都位于同一个设备上否则框架将不知道在哪里存储结果甚至不知道在哪里执行计算。 存储在GPU上 有几种方法可以在GPU上存储张量。例如我们可以在创建张量时指定存储设备。 在第一个gpu上创建张量变量X。在GPU上创建的张量只消耗这个GPU的显存。我们可以使用nvidia-smi命令查看显存使用情况。一般来说需要确保不创建超过GPU显存限制的数据。 X torch.ones(2, 3, devicetry_gpu()) X # tensor([[1., 1., 1.],[1., 1., 1.]], devicecuda:0)假设至少有两个GPU下面的代码将在第二个GPU上创建一个随机张量。 Y torch.rand(2, 3, devicetry_gpu(1)) Y # tensor([[0.4860, 0.1285, 0.0440],[0.9743, 0.4159, 0.9979]], devicecuda:1)复制 如果我们要计算X Y我们需要决定在哪里执行这个操作。例如如下图所示不要简单地X加上Y这会导致异常运行时引擎不知道该怎么做它在同一设备上找不到数据会导致失败。   由于Y位于第二个GPU上所以我们需要将X移到那里然后才能执行相加运算。 Z X.cuda(1) print(X) print(Z)# tensor([[1., 1., 1.],[1., 1., 1.]], devicecuda:0) # tensor([[1., 1., 1.],[1., 1., 1.]], devicecuda:1)
http://www.w-s-a.com/news/777338/

相关文章:

  • 佛山自助建站软件湖南seo优化推荐
  • 免费微信微网站模板下载不了优化人员配置
  • wordpress 导航网站主题画流程图的网站
  • 皮卡剧网站怎样做排名网
  • 网站开发 兼职哪个网站是做安全教育
  • 商品展示类网站怎么用群晖nas做网站
  • 长腿蜘蛛wordpresssem优化推广
  • 中国铁路建设监理协会官方网站深圳福田区怎么样
  • 互联网网站开发发展wordpress文章自定义栏目
  • 众筹网站平台建设工信部网站备案系统
  • 网站301重定向代码wordpress 加子目录
  • 淄博网站制作优化推广asp做学生信息网站
  • 海口招商建设有限公司网站淮安哪有专业做网站的公司
  • 喀什哪有做网站的国内正规seo网络推广
  • 网站设计初步规划公司网页打不开是什么原因
  • 深圳企业网站建设推广服务php做的商城网站设计论文
  • 韩雪冬网站手机网站开发 宽度
  • 奉贤专业做网站新手怎么做企业网站
  • 做网站用哪几个端口 比较好手机号网站源码
  • 手机免费代理ip网站那个旅游网站做攻略最好
  • 西安做网站找哪家公司好苏州专业网站建设开发
  • dedecms如何做网站网站设计实施方案
  • 网站建设合约品牌设计有哪些
  • 织梦企业门户网站宝塔搭建wordpress网站
  • 网站为什么没有排名了11月将现新冠感染高峰
  • 网站开发维护专员岗位职责辽阳企业网站建设
  • 做外国订单有什么网站网站设计论文提纲
  • 商城网站建设报价方案导师让做网站
  • 清远市企业网站seo联系方式动易官方网站
  • 手机上怎么做能打开的网站一级域名和二级域名跨域