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

电子产品网站建设策划深圳装修公司大全

电子产品网站建设策划,深圳装修公司大全,网站留言短信通知,html演示网站可以说#xff0c;到现在我们才真正接触到深度网络。最简单的深度网络称为多层感知机。 多层感知机由多层神经元组成#xff0c;每一层与它的上一层相连#xff0c;从中接收输入#xff1b;同时每一层也与它的下一层相连#xff0c;影响当前层的神经元。 和以前相同到现在我们才真正接触到深度网络。最简单的深度网络称为多层感知机。 多层感知机由多层神经元组成每一层与它的上一层相连从中接收输入同时每一层也与它的下一层相连影响当前层的神经元。 和以前相同先介绍它的基本内容再从零开始实现最后利用 Pytorch 框架简洁实现。 一、多层感知机 隐藏层 回想一下我们上一节中的 softmax 模型架构该模型通过线性变换将输入映射为输出然后进行 softmax 操作。 但是这样的线性模型可能会出错。线性意味着单调即如果权重为正的话任何特征的增大都将引起输出的增大。 有时这样的模型是适合的且我们还可以通过一些处理如对数运算使得线性模型能够起作用。 然而现实生活中更多的是不单调的情况。例如根据体温预测死亡率对于高于 37 度的人来说体温越高越危险而对于低于 37 度的人来说温度越高风险越低。 再想想我们上一节实现的分类问题一张 28 × 28 28\times28 28×28 的图片我们将其视为了具有 784 个特征的输入分别对应于 784 个像素点。 我们增强某个像素的强度是否就能增大这张图片属于某个类别的概率呢显然是不会的。 图像分类的结果与图片的像素强度具有更加复杂的关系并且我们也难以通过一些简单的变换使得线性模型可行。 我们可以在网络中加入一个或多个隐藏层来克服线性模型的缺陷使其能处理更复杂的函数关系。 其中一个简单的办法是将许多全连接层堆叠在一起。每一层输出的上面的层直到生成最后的输出。这种架构通常称为多层感知机(multilayer perceptron, MLP)。 这个多层感知机有 4 个输入3 个输出其隐藏层包含 5 个 隐藏单元。 输入层不涉及任何计算因此使用此网络产生输出只需要实现隐层和输出层的计算故该多层感知机的层数为 2。 但是加入了一层隐藏层后实际上输入和输出还是线性关系因为线性关系嵌套还是线性的。 为了发挥多层架构的潜力我们还需要一个额外的因素在线性变换之后对每个隐藏单元应用非线性的激活函数(activation function)。激活函数的输出被称为活性值(activations)。 一般来说有了激活函数就不可能再将我们的多层感知机退化为线性模型。 激活函数 激活函数通过计算加权和并加上偏置来确定神经元是否应该被激活它们将输入信号转换为输出的可微运算。常见的激活函数有 1. ReLU 函数 因为修正线性单元(Rectified linear unit, ReLU)实现简单同时在各种预测任务中表现良好因此它广受欢迎。 ReLU 提供了一种非常简单的非线性变换。给定元素 x x xReLU 函数被定义为该元素与 0 的最大值。 2. Sigmoid 函数 对于一个定义域在 R R R 中的输入sigmoid 函数将输入变换为区间(0, 1)上的输出。因此sigmoid 通常被称为挤压函数。 3. tanh 函数 与 sigmoid 函数类似tanh(双曲正切)函数也能将其输入压缩转换到区间(-1, 1)上。 二、多层感知机的从零开始实现 我们继续研究上一节的分类问题同样使用 Fashion-MNIST 数据集。 初始化模型参数 回想一下我们在 softmax 里的初始化因为 softmax 回归只有一层故只需要初始化一个权重向量和一个偏置即可。 多层感知机多了一层线性层故共有 4 个模型参数隐藏层的权重、偏置以及输出层的权重及偏置。 此外隐藏层的宽度需要我们确定其可视为一个超参数。一般我们取 2 的若干次幂且介于输入大小和输出大小之间这里我们选择 256。 隐层的参数形状为 784 × 256 784\times 256 784×256而输出层参数的形状为 256 × 10 256\times10 256×10。 num_inputs, num_outputs, num_hiddens 784, 10, 256W1 nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_gradTrue) * 0.01)b1 nn.Parameter(torch.zeros(num_hiddens, requires_gradTrue))W2 nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_gradTrue) * 0.01)b2 nn.Parameter(torch.zeros(num_outputs, requires_gradTrue))params [W1, b1, W2, b2]定义激活函数 这里我们选择 ReLU用于处理隐层的输出再出入输出层。 def relu(X): # 激活函数a torch.zeros_like(X)return torch.max(X, a)定义模型 有了激活函数后模型的定义可直接使用矩阵乘法实现。 def net(X): # 模型X X.reshape((-1, num_inputs)) # 展平H relu(XW1 b1) # 这里“”代表矩阵乘法return (HW2 b2)定义损失函数 这里我们通用采用交叉熵损失。值得一提的是直接调用的 nn 模块里的交叉熵损失函数它里面就包含了 softmax 操作。 loss nn.CrossEntropyLoss(reductionnone) # 损失函数训练 多层感知机的训练和 softmax 大差不差直接用我们之前写好的那个训练函数。 num_epochs, lr 10, 0.1optimizer torch.optim.SGD(params, lrlr)train(net, train_iter, test_iter, loss, num_epochs, optimizer)得到的结果为如下。可以发现加了激活函数后训练损失倒小了不少但测试集精度并未有明显提升。 第10轮的训练损失为0.3840572128295898 第10轮的训练精度为0.8638666666666667 第10轮的测试集精度为0.8394有了前面线性回归和 softmax 回归的基础这里实现起来是很轻松的只是模型参数多了需要单独初始化有些麻烦。 下面我们看看简洁实现。 三、多层感知机的简洁实现 定义模型与初始化参数 调用框架的话在定义模型调用 nn.Sequential 时注意有 4 层第一层展平第二层隐层第三层激活第四层输出。 模型的初始化可以利用前面定义过的初始化权重函数init_weights()。 net nn.Sequential(nn.Flatten(),nn.Linear(784, 256),nn.ReLU(),nn.Linear(256, 10)) # 定义模型net net.to(try_gpu())net.apply(init_weights) # 初始化模型参数训练 可以直接把 softmax 回归的简洁实现代码复制过来把定义模型和初始化参数的部分改了就 OK 了。 训练情况如下 第10轮的训练损失为0.3854055678049723 第10轮的训练精度为0.86335 第10轮的测试集精度为0.8503两种实现方式的代码见资源。
http://www.dnsts.com.cn/news/24560.html

相关文章:

  • 相亲网站如何做自我介绍微信怎么弄公众号
  • 网站如何导入百度地图微信营销号是啥意思
  • 签约做网站模板网站开发专业建设
  • 北京建网站品牌公司网站建设制作找哪家
  • 商丘给企业做网站的公司天津大型网站建设风格
  • 做门户网站需要什么知乎营销平台
  • 小米网站设计制作灯笼活动
  • php做旅游网站广东蕉岭县建设局网站
  • 网站突然被降权怎么办建设网站需要哪些东西
  • asp.net 做网站好吗营销类网站
  • 西安高端网站定制网站建设的拓扑结构
  • 成都网站建设 川icp备wordpress做排行榜单
  • 怎么建设手机网站首页云县网站建设
  • 网站开发常见面试题南昌招网页设计师的公司
  • 网站开发技术文档格式广告公司创意取名
  • 做电视的视频网站吗珠海杰作网站建设网络公司
  • 直播网站怎么做的专业做网站安全的sine安
  • 什么网站可以找人做设计师搜索热门关键词
  • 重庆网站建设模板阿里云虚拟主机可以做几个网站吗
  • 荥阳市网站建设做网站应达到什么效果
  • 杭州seo网站推广排名做线下极限运动的网站
  • 广告联盟做网站网站后台模板怎样使用
  • 做的网站提示不安全jsp网页成品免费下载
  • 网站IcP在哪查池州网站网站建设
  • 卡密网站建设专业的企业网站建设
  • 凤冈建设局网站网站建设需要什么内容
  • 合肥建设网站node.js做企业网站
  • html网站架设个人网站建设背景和目的
  • app开发网站排行做网站图片切图是什么
  • 网站开发工程师简介郑州网站建设贴吧