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

百度如何把网站做链接整站优化网站

百度如何把网站做链接,整站优化网站,做网站用什么语言快,设计公司网页制作还是延续我们这个系列博文。之前,我们讲解了:张觉非:神经网络反向传播算法​zhuanlan.zhihu.com张觉非:计算图反向传播的原理及实现​zhuanlan.zhihu.com张觉非:运用计算图搭建 LR、NN、Wide & Deep、FM、FFM 和 D…

   referrerpolicy=

还是延续我们这个系列博文。之前,我们讲解了:

张觉非:神经网络反向传播算法​zhuanlan.zhihu.com
   referrerpolicy=
张觉非:计算图反向传播的原理及实现​zhuanlan.zhihu.com
   referrerpolicy=
张觉非:运用计算图搭建 LR、NN、Wide & Deep、FM、FFM 和 DeepFM​zhuanlan.zhihu.com
   referrerpolicy=

现在,我们用我们的计算图框架(VectorSlow)搭建一些深度各异的多层全连接神经网络,并观察梯度消失导致的“训不动”现象。首先看一下代码(gradient_show.py):

import matplotlib.pyplot as plt
from matplotlib import animation
from sklearn.metrics import accuracy_score
import os# 自己的包
from optimizer import *
from util import get_data, construct_pow2
from nn import neural_networkn = 5  # 特征数
classes = 2
epoches = 3# 构造训练数据
train_x, train_y, test_x, test_y = get_data(number_of_classes=classes, number_of_features=n)# 构造神经网络计算图
X, logits = neural_network(n, classes, (6, 6, ), "ReLU")# 对模型输出的 logits 施加 SoftMax 得到多分类概率
prob = SoftMax(logits)# 训练标签
label = Variable((classes, 1), trainable=False)# 交叉熵损失
loss = CrossEntropyWithSoftMax(logits, label)  # 注意第一个父节点是 logits# Adam 优化器
optimizer = Adam(default_graph, loss, 0.02, batch_size=32)# 绘制动画
fig = plt.figure(figsize=(11, 6))
ax = fig.add_subplot(1, 1, 1)# 动画初始化函数
def init():global axdefault_graph.draw(ax)# 动画更新函数
c = 0
e = 0
val_acc = 0def update(idx):global c, e, loss, ax, val_accX.set_value(np.mat(train_x[c, :]).T)label.set_value(np.mat(train_y[c, :]).T)# 执行一步优化optimizer.one_step()# 训练样本上的 lossif loss.value is None:loss.forward()train_loss = loss.value[0, 0]probs = []for i in range(len(test_x)):X.set_value(np.mat(test_x[i, :]).T)label.set_value(np.mat(test_y[i, :]).T)# 前向传播计算概率prob.forward()probs.append(prob.value.A1)# 取概率最大的类别为预测类别pred = np.argmax(np.array(probs), axis=1)truth = np.argmax(test_y, axis=1)val_acc = accuracy_score(truth, pred)default_graph.draw(ax)msg = "epoches:{:d}, iteration:{:d}, loss:{:.8f}, validation accuracy:{:.3f}%".format(e + 1, c + 1, train_loss,val_acc * 100)ax.set_title(msg)print(msg)c = (c + 1) % len(train_x)if c % len(train_x) == 0:e += 1file = 'video/gradient_show.mp4'if os.path.exists(file):os.remove(file)anim = animation.FuncAnimation(fig, update, init_func=init, frames=epoches * len(train_x), interval=50, blit=False)
anim.save(file)
# plt.show()

这份代码的前半部分与上一篇博文中的代码类似,搭建计算图,后半部分将一步迭代的逻辑放进动画 update 函数。我们用这份代码绘制几个不同深度的全连接神经网络以及非全连接神经网络,并观察它们的训练过程。

n = 5  # 特征数
classes = 2
epoches = 5

特征数和类别数一般不用改,epoch 数量可以改改试试。注意代码最后一句:

anim.save(file)
# plt.show()

决定是将动画保存成 .mp4 文件还是在运行过程中展示出来。构造神经网络的计算图的代码是:

# 构造神经网络计算图
X, logits = neural_network(n, classes, (6,), "ReLU")

我们主要通过这句话构造不同深度、每层的神经元个数、以及激活函数的神经网络。neural_network 函数的代码如下(nn.py):

from node import *def neural_network(n, classes=2, hiddens=(12,), activation="ReLU"):"""构造一个多层全连接神经网络的计算图。"""# x 是一个 n 维向量变量,不初始化,不参与训练x = Variable((n, 1), init=False, trainable=False)# 构造全连接层input_size = ninput_vector = xfor l, h_size in zip(np.arange(len(hiddens)), hiddens):output = Add(MatMul(Variable((h_size, input_size), True),input_vector),Variable((h_size, 1), True))# 隐藏层的输出if activation == "ReLU":output = ReLU(output)elif activation == "Logistic":output = Logistic(output)else:output = outputinput_size = h_sizeinput_vector = output# 输出层的神经元logits = Add(MatMul(Variable((classes, input_size), True),input_vector),Variable((classes, 1), True))# 返回输入和 logitsreturn x, logits

我们首先试试 2 个隐藏层,每层 6 个神经元,激活函数为 ReLU 的简单神经网络:

# 构造神经网络计算图
X, logits = neural_network(n, classes, (6, 6, ), "ReLU")

将 epoches 设为 3 ,运行 gradient_show.py,得到动画(流量大慎点,本文的视频都是 4 至 6 M):

   referrerpolicy=
2 隐藏层,每层 6 神经元,ReLUhttps://www.zhihu.com/video/1131926728960053248

解释一下这个视频,它将 VectorSlow 的计算图绘制成图,每个节点是一个圆圈。节点的类型标记在圈中,例如 Variable ,Add 等。每一个节点的值都是矩阵,Variable 类型节点将其保存的矩阵的形状标记在括号中。

训练运行起来后,每一次反向传播都计算最终结果节点(具体说就是交叉熵 loss)对每个计算图节点的“雅可比矩阵”。在最终目标是标量(

   referrerpolicy= 矩阵)的情况下,这些雅可比矩阵都是
   referrerpolicy= 矩阵,
   referrerpolicy= 是节点的值的形状。目标是标量时雅可比矩阵是行向量,它的转置就是目标对中间节点的梯度。

每一次反向传播将节点的梯度的长度(模)显示在节点名称下方的方括号中(例如 [0.003]),同时用颜色的深浅表示梯度的模的大小。每一次反向传播中,若节点的梯度较大,则颜色较深,变量节点(Variable)的值也就得到较大的更新。灰色的节点是不参与训练的节点。

随机梯度下降每次用一个样本前向传播计算 loss ,反向传播计算梯度,故每一次迭代中每一个节点的梯度有较大随机性,但如果看到节点的颜色在闪烁,就说明它(不时)获得了较大的梯度,得到了较显著的更新(实际上这里说得有些简化,VectorSlow 是积累一个 mini batch 的梯度,用 mini batch 内全部样本的平均梯度更新变量)。

动画的标题展示了 epoch 数、每个 epoch 内的迭代数、单个训练样本上的 loss 值(所以随机浮动较大,但整体应呈下降趋势)以及验证集上的正确率。


接下来我们将隐藏层数增加到 3 并增加每层的神经元个数:

# 构造神经网络计算图
X, logits = neural_network(n, classes, (8, 8, 8,), "ReLU")

运行 3 个 epoch :

   referrerpolicy=
3 隐藏层,每层 8 神经元,ReLUhttps://www.zhihu.com/video/1131931047398690816

可以看到一开始时网络前部的层(节点)没有得到大的梯度,几乎无更新,这反映在损失值和正确率中。随着训练的进行,网络前部节点逐渐获得了较大的梯度。


接下来,我们再次加大网络的深度(5 层,每层 24 个神经元):

# 构造神经网络计算图
X, logits = neural_network(n, classes, (24, 24, 24, 24, 24), "ReLU")

当层数达到 5 层时训练比较艰难,但终于整个网络还是“点亮”了:

   referrerpolicy=
5 隐藏层,每层 24 神经元,ReLUhttps://www.zhihu.com/video/1131940053508923392

现在我们保持网络结构不变,将激活函数换成 Logistic 试试:

   referrerpolicy=
5 层,每层 24 神经元,Logistichttps://www.zhihu.com/video/1131945546616836096

发生梯度消失,网络前部的层一直没有获得较大的梯度,训不动。不玩了,有兴趣的读者可以自己试试更多更深的网络结构,也可以用我们的计算图框架添加一些像跳跃连接这种结构。


最后,再做一下广告:《深入理解神经网络——从逻辑回归回到CNN》马上就要上市啦。

   referrerpolicy=
暂定封面

   referrerpolicy=

   referrerpolicy=

   referrerpolicy=
http://www.lbrq.cn/news/2725957.html

相关文章:

  • 做网站哪家便宜企业线上培训课程
  • 猎头公司网站建设方案疫情排行榜最新消息
  • 网站logo做黑页网络舆情软件免费入口
  • 个人博客网站设计的目的什么是网络营销战略
  • 浙江网站建设公司电话seo 的原理和作用
  • 北京手机网站制作多少钱软文代写价格
  • 淄博网站制作定制推广怎样创建一个自己的网站
  • 馆陶网站建设电话互联网推广销售好做吗
  • 全站加速 wordpress百度指数峰值查询
  • 做网站的软件是什么广州推广工具
  • 郑州做网站哪家比较好宁波百度seo排名优化
  • 新手做市场分析的网站seo推广论坛
  • 页面模板 wordpress东莞百度推广优化公司
  • 做网站ie缓存网店推广实训报告
  • 怎么看一个网站是由哪个公司做的网站数据统计工具
  • 忒低网站长怎么做百度关键词数据
  • 网站开发工程师职业定位360网站推广客服电话
  • 网站首页模板免费下载汕头seo外包公司
  • 网站建设的博客外贸网站平台哪个好
  • wordpress靶机seo外链建设方法
  • 素锦wordpressseo网站诊断分析报告
  • app与网站的区别是什么一个网站的seo优化有哪些
  • 添加网站描述电商平台怎么注册
  • 心理服务网站建设内容seo站内优化站外优化
  • 江宁网站建设要多少钱怎么自己创建网页
  • 公司网站建设付款分录沈阳seo关键字优化
  • 如何做公司网站营销型网站制作
  • 沈阳网站建设推广域名是什么意思
  • wordpress怎么编辑保存王通seo
  • 北京塞车网站建设青岛网站建设制作推广
  • 初识CNN02——认识CNN2
  • HTML5新增属性
  • 机器学习之PCA降维
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.13
  • 洛谷 小 Y 拼木棒 贪心
  • JVM宝典