DAGNN:有向无环图神经网络
1.综述:
DagNN是用来代替SimpleNN的CNN wrapper。它是面向对象的,并且允许采用有向无环图构建神经网络。与SimpleNN相比,DagNN速度有点慢但是更加灵活。
一个DAG对象包括以下数据成员:
layers: 神经网络层
vars: 网络变量
params: 网络参数
meta: 额外的补充信息
同时,DAG还包括有一些临时的数据成员:
- mode [normal] : 这个标志可以是“normal”或者“test”。在后面一种情况,某些模块转向测试模式,适合验证和评估;
- accumulateParamDer [false] : 如果设置为“true”,那么网络参数的导数就会被累计,而不是在下次计算时重写;
- conserveMemory [true] : 如果这个标记位设置为“true”,DagNN将会丢弃中间变量值,一旦在计算过程中不再需要它们;
- device [cpu] : 这个标志的意思是,DagNN驻留在CPU内存中或者GPU内存中,使用 DagNN.move()可以在设备之间移动DagNN。
2. DAGNN相关函数
2.1 初始化为空
obj = DagNN() %初始化为空的DAGNN结构体
2.2 获取网络输入变量的名字
inputName = getInputs(obj) % 获取网络输入的名字
返回一个cell类型的输入组合。
2.3 获取网络输出变量的名字
outputName = getOutputs(obj); % 获取网络输出名称
2.4 获取网络层索引
index = getLayerIndex(obj, layerName); % 根据神经网络层的名字获取索引,用于网络评价;obj.layers(index); % 用于网络评价% 返回如下信息
% name = 'DCF'
% inputs = {'x', 'z'}
% outputs = {'response'}
% params = {}
% inputIndexsx = [7,14]
% outputIndexes = 15
% paramIndexes = []
% forwardTime = 0.6927
% backwardTime = 0.2452
% block = [1x1 dagnn.DCF]
2.5 获取网络变量的索引
index = getVarIndex(obj, varName); % 返回指定变量名的索引obj.vars(index); % 对变量进行评价% 返回如下信息
% name = 'conv1'
% value = []
% der = []
% fanin = 1
% fanout = 1
% precious = 0
2.6 获取参数的索引
index = getParamIndex(obj, paramName); % 指定参数名获取参数的索引号obj.params(index);% 返回如下信息:
% name = 'conv1f'
% value = 3x3x1x32 gpuArray
% der = 3x3x1x32 gpuArray
% fanout = 2
% trainMethod = 'gradient'
% learningRate = 0.01
% weightDecay = 0.0005
2.7 层、变量、参数拷贝
layer = getLayer(obj, layerName); %var = getVar(obj, varName); %param = getParam(obj, paramName); %
getLayerExecutionOrder(obj);% 例如,孪生网络:
% 1 2 —— 3 4 —— 5 6 —— 13 —— 14 —— 15
% | | | | | |
% 7 —— 8 9 —— 10 11 —— 12
%
2.8 添加变量、参数、层
addVar(obj, varName);addParam(obj, paramName);addLayer(layerName, layer, input, output, params);
3. 评价DAGNN
eval(obj, inputs); % 指定输入值,评价DAGNN。
% 输入应该是cell矩阵,如 input = {'inputName', inputValue, ...},该语句的调用将导致网络的正向信息传递;并计算输出变量的值;eval(obj, inputs, derOutputs); % 评价DAGNN前向和反向,执行误差反向传播算法。
% 和inputs很类似,的人Outputs也是cell矩阵,{‘outputName’, outputDerValue, ...};
4. 理解反向传播
4.1 损失函数权重分配层
通常,对应到损失函数,网络从表来那个的输入开始进行反向传播。在这种情况下,outputDerValue可以解释为输出的权重,通常设置为1.例如, {‘objective’, 1}。从‘objective’输出变量(权重为1)开始反向传播。
然而,很多情况下DAGNN会包括很多损失函数,在这种情况下,就需要设置不同的权重去平衡不同的目标,例如:{‘objective1’, w1, 'objective2', w2, ... }。
4.2 影响evaluation的因素
- 评价模式可以是‘normal’ 或者 ‘test’; 在不同模式下,行为是不一样的。例如,在‘test’模式下,Dropout变成一个 Pass-through层; batch normalization使用固定的动量(通常极大提高了测试的性能);
- 在默认情况下,DAG会主动采用节省内存模式 conserve memory。对于GPU来说这是至关重要的,因为GPU的资源很稀缺。然而,这也意味着,在训练过程中,大多数的变量值和他们的导数都被丢弃了。 为了便于调试,这些中间变量有时对我们很重要, 在这种情况下,我们可以设置 obj.conserveMemory = false; 当然,我们也可以利用 obj.vars(v).precious = true 进行中间变量保存。
DAGNN:有向无环图神经网络相关推荐
- ardl模型stata命令_Stata新命令快讯: 有向无环图、模糊倍分法等
编者按: 自今日起,Stata 连享会 (公众号 StataChina) 将开设「Stata新命令快讯」专栏,定期推送 SSC 网站上发布的最新命令,对于我们认为重要的命令进行标注. 对于您感兴趣的命 ...
- ardl模型stata命令_Stata新命令快讯:有向无环图、模糊倍分法等
Stata 连享会 主页 || 视频 || 推文 温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验. 编者按: 定期递送 SSC 网站上发布的最新命令,对于我们认为重要的命令进行标注. 对于 ...
- 笔记:深度学习与有向无环图SVM结合用于年龄估计的局部调整
阅读论文:Combined Deep Learning With Directed Acyclic Graph SVM for Local Adjustment of Age Estimation | ...
- 【图论】有向无环图的拓扑排序
1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环.常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度.拓扑排序是对DA ...
- 算法精解:DAG有向无环图
DAG是公认的下一代区块链的标志.本文从算法基础去研究分析DAG算法,以及它是如何运用到区块链中,解决了当前区块链的哪些问题. 关键字:DAG,有向无环图,算法,背包,深度优先搜索,栈,BlockCh ...
- C#实现有向无环图(DAG)拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在 ...
- 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)
D.魔术球问题(有向无环图的最小路径覆盖.思维)[省选/NOI- ] P2765 魔术球问题 [问题分析] 枚举答案转化为判定性问题,然后最小路径覆盖,可以转化成二分图最大匹配,从而用最大流解决. [ ...
- 【网络流24题】解题报告:C、最小路径覆盖问题(有向无环图最小路径覆盖)(最大流)
C.最小路径覆盖问题(有向无环图最小路径覆盖)(最大流)[省选/NOI- ] 拆点最大流 [问题分析] 有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决. [建模方法] 构造二分 ...
- 数据结构7.5_有向无环图及其应用
一个无环的有向图称做有向无环图,简称DAG图. 检查一个有向图是否存在环要比无向图复杂. 对于无向图来说,若深度优先遍历过程中遇到回边(即指向已访问过的顶点的边),则必定存在环. 而对于有向图来说,这 ...
最新文章
- 建议使用更加安全的ast.literal_eval去替代eval
- linux下jetty简单配置
- l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?
- 高速缓存系统之memcache c++使用实例
- [Web 前端] mobx教程(二)-mobx主要概念
- 如何正确访问 redis 中的海量数据?避免事故产生
- 如何在移动端复制到剪切板
- DotNet关键知识点——WPF篇(一)(范德成编辑批注版)
- [AHOI2009]维护序列
- fusion安装centos7并配置静态ip
- 手机如何访问电脑局域网文件共享服务器,数据共享 手机怎么访问电脑文件?多个设备之间数据共享...
- openwrt uci
- HTML5 Video播放服务端大文件
- Atitit uke各大事业部规划 约365个事业部
- django 1.8 mysql_mysql - 升级1.7.4到django 1.8 south.db.mysql错误,不使用南 - 堆栈内存溢出...
- 解决CondaVerificationError: The package for pytorch located at...
- T-SQL数据库修改、删除
- 二维动画后期制作的要点
- Python爬虫工程师需要掌握哪些技术?
- 海思芯片部署MPP并验证功能