DagNN是SimpleNN的CNN封装代替。它是面向对象的,并允许使用有向非循环图(DAG)拓扑构建网络。因此,它是更灵活的,虽然对于小型CNNs有点复杂和稍慢一些。
DAG对象包含以下数据成员:
• layers:网络层。
• vars:网络变量。
• params:网络参数。
• meta:有关CNN的附加信息(例如输入输入的图像格式规范
• image format specification).
还有额外的临时数据成员:
• mode[ normal]
这个标志可以是normal或test。在后一种情况下,某些块切换到适合于验证或评估的测试模式,而不是训练。例如,退出模式成为直通块test。
• accumulateParamDers[ false]
如果该标志被设置为true,则在下一次计算导数时,累积网络参数的导数而不是重写。
• conserveMemory[ true]
如果此标志设置为true,则DagNN将在计算中不再需要时立即丢弃中间变量值。这对于节省GPU上的内存尤为重要。
• device[ cpu]
该标志告诉DagNN是否驻留在CPU或GPU内存中。使用该DagNN.move()功能在设备之间移动DagNN。
DagNN是可复制句柄,即允许使用copy操作符创建深层复制 deep_copy = copy(dagnet);。在所有情况下,深拷贝都位于CPU内存中(即在复制前从GPU传输)。备注:作为副作用,原始网络正在重置(所有变量都被清除),只有网络结构和参数被复制。
另请参见:matlab.mixin.Copyable
DAGNN - 初始化一个空的DaG
OBJ = DAGNN()初始化一个空的DaG。
另请参见addLayer(),loadobj(),saveobj()。
GETINPUTS - 获取输入变量的名称
INPUTS = GETINPUTS(obj)返回一个单元格数组,其中包含DaG对象的输入变量的名称,即DaG的源(不包括网络参数,也可以被认为是源)。
GETOUTPUTS - 获取输出变量的名称
OUTPUT = GETOUTPUTS(obj)返回一个包含DaG对象输出变量名称的单元格数组,即DaG的汇数。
GETLAYERINDEX - 获取图层的索引
INDEX = GETLAYERINDEX(obj,NAME)返回图层NAME的索引。NAME也可以是字符串的单元格数组。如果没有找到具有这样一个名称的层,则为索引返回值NaN。
然后可以将层作为obj.layers(INDEX) DaG 的属性进行访问。
索引是稳定的,除非修改DaG(例如通过添加或删除图层); 因此它们可以被缓存以实现更快的可变访问。
另请参见getParamIndex(),getVarIndex()。
GETVARINDEX - 获取变量的索引
INDEX = GETVARINDEX(obj,NAME)获取具有指定NAME的变量的索引。NAME也可以是字符串的单元格数组。如果没有找到具有这样一个名称的变量,则为索引返回值NaN。
然后可以将变量作为obj.vars(INDEX) DaG 的属性进行访问。
索引是稳定的,除非修改DaG(例如通过添加或删除图层); 因此它们可以被缓存以实现更快的可变访问。
另请参见getParamIndex(),getLayerIndex()。
GETPARAMINDEX - 获取参数的索引
INDEX = GETPARAMINDEX(obj,NAME)获取具有指定名称的参数的索引。NAME也可以是字符串的单元格数组。如果没有找到具有这样一个名称的参数,则为索引返回值NaN。
参数可以作为obj.params(INDEX) DaG 的属性访问。
索引是稳定的,除非修改DaG(例如通过添加或删除图层); 因此可以缓存参数访问速度。
另请参见getVarIndex(),getLayerIndex()。
GETLAYER - 获取图层定义的副本
LAYER = GETLAYER(obj,NAME)返回具有指定的NAME的图层定义结构的副本。NAME也可以是字符串的单元格数组或索引数组。如果没有指定名称或索引的参数存在,则抛出错误。
另请参见getLayerIndex()。
GETVAR - 获取图层定义的副本
VAR = GETVAR(obj,NAME)返回具有指定NAME的网络变量的副本。NAME也可以是字符串的单元格数组或索引数组。如果没有指定名称或索引的变量存在,则抛出错误。
另请参见getVarIndex()。
GETPARAM - 获取层参数的副本
PARAM = GETPARAM(obj,NAME)返回具有指定NAME的网络参数的副本。NAME也可以是字符串的单元格数组或索引数组。如果没有指定名称或索引的参数存在,则抛出错误。
另请参见getParamIndex()。
GETLAYEREXECUTIONORDER - 获取评估层的顺序
ORDER = GETLAYEREXECUTIONORDER(obj)以按照执行顺序的层的索引返回一个向量。这不一定是琐碎的顺序1,2,...,L,因为它取决于图形拓扑。
SETPARAMETERSERVER - 为参数派生设置参数服务器
SETPARAMETERSERVER(obj,PS)使用指定的ParameterServer PS在多个MATLAB进程之间存储和累加参数导数。
设置此选项后,net.params.der始终为空,必须从服务器检索导数值。
CLEARPARAMETERSERVER - 删除参数服务器
CLEARPARAMETERSERVER(obj)使用参数服务器。
ADDVAR - 向DaG添加变量
V = ADDVAR(obj,NAME)向DaG添加带有指定的名称的varialbe。这是一个内部功能; 向网络添加图层时会自动添加变量。
ADDPARAM - 向DaG添加参数
V = ADDPARAM(obj,NAME)将指定的NAME的参数添加到DaG。这是一个内部功能; 在网络中添加图层时,会自动添加参数。
ADDLAYER - 向DagNN添加图层
ADDLAYER(NAME,LAYER,INPUTS,OUTPUTS,PARAMS)将指定的层添加到网络中。NAME是具有图层名称的字符串,用作唯一的标识符。BLOCK是实现层的对象,它应该是Layer的子类。INPUTS,OUTPUTS是变量名称的单元格数组,参数名称的PARAMS。
另请参见REMOVELAYER()。
EVAL - 评估DAGNN
EVAL(obj,inputs)为指定的输入值评估DaG。inputs是这种类型的单元格数组{'inputName', inputValue, ...}。此调用将导致向前传递图形,计算输出变量的值。然后可以使用obj.vars(outputIndex)DaG对象的属性访问这些。可以使用该obj.getOutputIndex(outputName)调用获得输出的索引 。
EVAL(obj,inputs,derOutputs)向前评估DaG,然后向后评估,执行反向传播。类似于inputs, derOutputs是输出派生类型的{'outputName',outputDerValue,...}类型的单元格数组。
了解反向传播
只有那些outputDerValue非空的输出涉及反向传播,而其他输出被忽略。这可以附加到图形辅助层来计算错误或其他统计信息,但不涉及它们的反向传播。
通常一个人从标量出发开始反向传播,对应于损失函数。在这种情况下outputDerValue可以解释为该输出的权重,通常设置为1。例如:{'objective', 1}从'objective'重量为1 的输出变量反向传播 。
然而,在一些情况下,DaG可以包含多于一个这样的节点,例如因为一个具有多于一个的损失函数。在这种情况下,{'objective1', w1, 'objective2', w2, ...}可以平衡不同的目标。
最后,可以从不是 标量的输出反向传播。虽然这是不寻常的,但是可以通过指定其值outputDerValue与输出具有相同的维度; 在这种情况下,该值用作权重或投影的矩阵。
影响评估的因素
影响评估的因素有:
• 在评估模式可以是normal或test。根据模式,图层可能会有所不同。例如,退出在测试模式下成为一个直通层,批量归一化使用固定时刻(这通常会显着提高测试性能)。
• 默认情况下,DaG积极节省内存。这对于内存稀少的GPU来说尤为重要。然而,这也意味着大多数变量及其衍生物的值在计算过程中被丢弃。为了调试目的,观察这些变量可能很有趣; 在这种情况下,您可以设置obj.conserveMemoryDaG 的 属性false。也可以通过设置属性,以保护个人变量obj.vars(v).precious来true。
FROMSIMPLENN - 从SimpleNN网络初始化DagNN对象
FROMSIMPLENN(NET)使用SimpleNN格式从指定的CNN初始化DagNN对象。
SimpleNN对象是计算层的线性链。这些层通过未明确命名的变量和参数交换信息。因此,FROMSIMPLENN()使用多个规则自动分配这些名称:
• 从输入到CNN的输出,变量被称为 x0(第一层的输入端), x1,x2,...以这种方式xi是第i层的输出。
• 任何损失层需要两个输入,第二个是标签。这些被称为label(对于第一这样的层),然后 label2,label3...为任何其他类似的层。
另外,给定该选项,CanonicalNames该功能可以更改一些变量的名称,使其更方便使用。打开此选项:
• 网络输入被称为input代替x0。
• 调用每个SoftMax图层的输出prob(或prob2...)。
• 调用每个Loss层的输出objective(或objective2...)。
• 称为(或...)类型为softmax日志丢失的每个SoftMax或Loss层的输入。如果丢失层紧跟在SoftMax层之后,则上述规则取决于前提,并且输入名称不会更改。predictionprediction2
FROMSIMPLENN(___,'OPT',VAL,...)接受以下选项:
• CanonicalNames[ 假 ]
如果true使用上面的规则为某些变量分配更有意义的名称。
GETVARRECEPTIVEFIELDS - 获取变量的接受域
RFS = GETVARRECEPTIVEFIELDS(OBJ,VAR)将DagNN OBJ的所有变量的接收场RFS变为变量VAR。VAR是变量名或索引。
RFS在DagNN中的每个变量有一个条目,遵循与DAGNN.GETRECEPTIVEFIELDS()相同的格式。例如,RFS(i)是DagNN中的第i个变量的可接受域到变量VAR。如果第i个变量在DAG中不是VAR的后代,那么就没有接收域rfs(i).size == []。如果不能计算接收字段(例如,因为它取决于变量的值,而不仅仅是在网络拓扑上,或者如果不能被表示为滑动窗口)rfs(i).size = [NaN NaN]。
GETVARSIZES - 获取变量的大小
SIZES = GETVARSIZES(OBJ,INPUTSIZES)计算给定输入大小的DagNN变量的SIZES。inputSizes是类型{'inputName', inputSize, ...} 的单元格数组返回具有所有网络变量大小的单元格数组。
例如,计算类似imagenet的网络的批量大小为256所需的存储量:
batch_size = 256; single_num_bytes = 4;
input_size = [net.meta.normalization.imageSize, batch_size];
var_sizes = net.getVarSizes({'data', input_size});
fprintf('Network activations will take %.2fMiB in single.\n', ...

sum(prod(cell2mat(var_sizes, 1))) * single_num_bytes ./ 1024^3);
INITPARAM - 初始化DagNN的参数
OBJ.INITPARAM()使用每层的INIT()方法来初始化相应的参数(通常是随机的)。
LOADOBJ - 从结构初始化一个DagNN对象。
OBJ = LOADOBJ(S)从结构S初始化DagNN对象。与S = OBJ.SAVEOBJ()相反。如果S是字符串,则使用mat-file S中的数据初始化DagNN对象。否则,如果S是一个实例dagnn.DagNN,则返回S.
MOVE - 将DagNN移动到CPU或GPU
MOVE(obj,'cpu')将DagNN obj移动到CPU。
MOVE(obj,'gpu')将DagNN对象移动到GPU。
PRINT - 打印有关DagNN对象的信息
PRINT(OBJ)显示网络中功能和参数的摘要。STR = PRINT(OBJ)将摘要作为字符串返回,而不是打印。
PRINT(OBJ,INPUTSIZES)其中INPUTSIZES是类型为{'input1nam',input1size,'input2name',input2size,...}的单元格数组,使用每个列出的输入的指定大小打印信息。
PRINT(___,'OPT',VAL,...)接受以下选项:
• All[ 假 ]
显示以下所有信息。
• Layers[ ' '*]
指定要打印的图层。这可以是索引列表,数组名称的单元格数组或字符串“*”,这意味着所有图层。
• Parameters[ ' '*]
指定要打印的参数,类似于上述选项。
• Variables[ [] ]
指定要打印的变量,类似于上述选项。
• Dependencies[ 假 ]
是否显示每个输入的每个变量的依赖关系(几何变换)。
• Format[ 'ascii' ]
选择之间ascii,latex,csv, '有向图',和dot。前三格格式打印表; digraph使用绘图函数digraph(在MATLAB> = R2015b中支持),最后一个以dot格式打印图形。在零输出的情况下,它会使用系统上的dot命令和start(Windows),display(Linux)或open(Mac OSX)来编辑和可视化点图。在后一种情况下,无论其他参数如何,所有变量和图层都包含在图中。
• FigurePath[ 'tempname.pdf' ]
设置dot保存任何生成的图形的路径。目前,这仅适用于格式dot。默认情况下,使用唯一的临时文件名(tempname用tempname()调用替换)。扩展名指定输出格式(作为-Text参数传递给点)。如果不提供扩展名,默认使用PDF。此外,将用于生成图形的.dot文件存储到同一位置。
dotArgs::''其他点参数。例如'-Gsize =“7”'以产生较小的输出(用于网络结构的检查等)。
• MaxNumColumns[ 18 ]
每个表中的最大列数。
参见:DAGNN,DAGNN.GETVARSIZES()。
REBUILD - 重建DagNN对象的内部数据结构
REBUILD(obj)重建DagNN对象的内部数据结构。它是内部使用的帮助函数来更新网络,当添加或删除图层时。
REMOVELAYER - 从网络中删除一个图层
REMOVELAYER(OBJ,NAME)从DagNN对象OBJ中移除层NAME。NAME可以是字符串或单元格数组的字符串。
RENAMELAYER - 重命名图层
RENAMELAYER(OLDNAME,NEWNAME)将层OLDNAME的名称更改为NEWNAME。NEWNAME不应该是现有图层的名称。
RENAMELAYER - 重命名参数
RENAMEPARAM(OLDNAME,NEWNAME)将参数OLDNAME的名称更改为NEWNAME。NEWNAME不应该是现有参数的名称。
RENAMEVAR - 重命名变量
RENAMEVAR(OLDNAME,NEWNAME)将变量OLDNAME的名称更改为NEWNAME。NEWNAME不应该是现有变量的名称。
RESET - 重置DagNN
RESET(obj)复位DagNN对象。该函数清除存储在DagNN对象中的任何中间值,包括参数梯度。它也称为每层的复位功能。
SAVEOBJ - 将DagNN保存到香草MATLAB结构中
S = OBJ.SAVEOBJ()将DagNN OBJ保存到香草MATLAB结构S.对于保留未来的兼容性和运送纯结构的网络而非嵌入依赖关系代码,这是非常方便的。
对象可以重构obj = DagNN.loadobj(s)。
作为副作用,网络正在重置(所有变量都被清除)并被转移到CPU。
另请参见:dagnn.DagNN.loadobj,dagnn.DagNN.reset
SETLAYERINPUTS - 将输入设置或更改为图层
示例:NET.SETLAYERINPUTS('layerName',{'input1','input2',...})
SETLAYEROUTPUTS - 设置或更改图层的输出
示例:NET.SETLAYEROUTPUTS('layerName',{'output1','output2',...})
SETLAYEPARAMS - 设置或更改图层的参数
示例:NET.SETLAYERPARAMS('layerName',{'param1','param2',...})

DAGNN – 有向非循环图神经网络相关推荐

  1. 北邮王啸:图神经网络的两面性

    报告:王   啸 撰文:熊宇轩 作者简介 王啸,北京邮电大学,助理教授.研究方向为图神经网络.数据挖掘与机器学习.曾任清华大学计算机系博士后,天津大学博士,美国圣路易斯华盛顿大学联合培养博士,入选20 ...

  2. 2W字长文 | 漫谈工业界图神经网络推荐系统

    图神经网络是近年来很火的一个研究方向,在生物化学,推荐系统,自然语言处理等领域都得到了广泛应用.其中图神经网络在推荐系统的应用方面,已有几篇综述[1][2][3]做过详细的归纳总结.但是让人感到美中不 ...

  3. Graph Representation 图神经网络

    Graph Representation 图神经网络 图表示学习(representation learning)--图神经网络框架,主要涉及PyG.DGL.Euler.NeuGraph和AliGra ...

  4. 计算机鹅点云,CVPR 2020 | 用于点云中3D对象检测的图神经网络

    论文原文:Point-GNN: Graph Neural Network for 3D Object Detection in a Point Cloud 论文地址:https://www.amine ...

  5. hung-yi lee_p18_图神经网络(cont.)

    文章目录 1. 简介 2. 怎么把图喂到神经网络里面呢 3. 为什么需要GNN 4. 训练GNN遇到的问题 5. 后面的内容安排 6. GNN要做的事,常用数据集和基准 7. 第一种实现GNN的方法( ...

  6. 【组队学习】【26期】图神经网络

    图神经网络 论坛版块: http://datawhale.club/c/team-learning/27-category/26 开源内容: https://github.com/datawhalec ...

  7. 图神经网络如何对知识图谱建模? | 赠书

    几乎所有早期的知识图谱嵌入的经典方法都是在对每个三元组打分,在实体和关系的表示中并没有完全考虑到整幅图的结构. 早期,图神经网络的方法在知识图谱嵌入中并没有被重视,主要由于: 早期的图神经网络更多是具 ...

  8. 当深度学习遇上图: 图神经网络的兴起 | 赠书

    什么是图 也许我们从来没有意识到,我们正生活在一个充满图的世界.例如,我们最熟悉的社交网络(如下图所示),就是一个最典型的图. 在计算机领域,我们通常用图指代一种广义的抽象结构,用来表示一堆实体和它们 ...

  9. 性能超越图神经网络,将标签传递和简单模型结合实现SOTA

    译者 | 刘畅 出品 | AI科技大本营 头图 | CSDN付费下载自视觉中国 图神经网络(GNNs)是图学习中一种主流的技术.然而,对于GNN为什么在实际使用中很成功以及它们是否是优异性能所必需的技 ...

最新文章

  1. HTML Inspector – 帮助你编写高质量的 HTML 代码
  2. 数据结构与算法分析-第一章Java类(04)
  3. LSTM神经网络Demystifying LSTM neural networks
  4. [转]使用npm发布vue组件
  5. Linux进程实践(5) --守护进程
  6. Mac安装sqlmap【亲测有用】
  7. C++之父访谈录:我也没想到 C ++ 会这么成功!
  8. 做了个梦,你大爷的,叫什么事啊,吓死我了!
  9. “重命名”用“改名”更好
  10. V5-SP6:iocomp-32/iocomp-64-crack-免安装
  11. 芯片数据分析步骤3 芯片质量控制-affy
  12. 解决出现Creating mailbox file: File exists问题,并分析出错原因
  13. 物理机安装Centos7
  14. swift WkWebView的返回,goback,跳过同级
  15. TeamView 商用检测破解
  16. java profiler 工具_(转)Java应用性能分析工具:async-profiler
  17. html边框颜色不显示,关于html:Firefox中边框颜色显示不正确
  18. 【探索】excel VBA的任意坐标画线问题
  19. Pytorch中的梯度知识总结
  20. 方案设计阶段目标成本形成过程

热门文章

  1. 简单编程(十一)简单编程 判断并输出500以内既能够被3整除又能够被6整除的整数。
  2. 大数据相关开源项目汇总
  3. 基于 Squid 实现爬虫代理服务
  4. 严正警告!!独处一室的人,请一定不要看文中介绍的URL,未成年也不能看![更新]
  5. 减治法(Decrease and Conquer)
  6. 【摘自csdn】一场我没有看懂的相亲
  7. 人工智能 deepface 换脸技术 学习
  8. deepfake ai智能换脸_AI换脸之后,智能去除马赛克视频工具被疯传,测试结果令人意外...
  9. keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!
  10. 在windows系统中安装Sulley