拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MXNet Clojure 网络可视化实战:从 Symbol 计算图到 testviz.pdf

MXNet Clojure 网络可视化实战从 Symbol 计算图到 testviz.pdf【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnet导读本文以 MXNet 仓库中 Clojure 包的 visualization 示例为主线讲解如何将 MXNet 的符号式Symbolic计算图渲染为 Graphviz 有向图并输出 PDF。你将从零搭建一个可直接运行的 Leiningen 项目理解plot-network与render两个核心 API 的参数含义并借助 Scala 包Visualization源码弄清节点着色、权重隐藏、形状推断等可视化原理。读完即可动手生成属于你自己的网络结构图。示例概览visualization 项目结构示例位于仓库 contrib/clojure-package/examples/visualization其 README.md 的核心指引只有一句话Runlein runto have a sample network visualization printed for you testviz.pdf即在示例目录下执行lein run程序会构建一个符号网络并输出testviz.pdf可视化文件。项目共 4 个文件project.cljLeiningen 项目配置声明依赖与主命名空间src/visualization/core.clj示例主程序构建符号、调用可视化 APItest/visualization/core_test.clj测试用例验证 PDF 确实生成README.md运行说明。环境准备安装 Clojure MXNet该示例依赖 Clojure MXNet 包contrib/clojure-package/README.md支持 Linux CPU、Linux GPU、OSX CPU 三种组合。快速上手方式是在project.clj的:dependencies中加入对应平台构件[org.apache.mxnet.contrib.clojure/clojure-mxnet-linux-cpu latest-version][org.apache.mxnet.contrib.clojure/clojure-mxnet-linux-gpu latest-version][org.apache.mxnet.contrib.clojure/clojure-mxnet-osx-cpu latest-version]Linux 还需额外安装 OpenCV 3.4、OpenBLAS、ATLAS、cURL 等系统库Ubuntu 示例命令见 contrib/clojure-package/README.md然后执行lein deps拉取依赖。本示例在 project.clj 中声明的依赖为(defproject visualization 0.1.0-SNAPSHOT :description Visualization example :plugins [[lein-cljfmt 0.5.7]] :dependencies [[org.clojure/clojure 1.9.0] [org.apache.mxnet.contrib.clojure/clojure-mxnet 1.6.0-SNAPSHOT]] :main visualization.core)关键点:main visualization.core告诉 Leiningen 运行哪个命名空间作为程序入口。运行示例在 contrib/clojure-package/examples/visualization 目录下执行lein run主程序 core.clj 的-main会调用test-viz并打印提示(defn -main [ args] (do (test-viz) (println Check for the testviz.pdf file in the project directory)))运行结束后项目目录下会生成testviz.pdf与对应的testvizDOT 源文件。该行为可由测试 core_test.clj 验证——它调用test-viz后断言testviz.pdf文件存在且是刚生成的文件(deftest check-pdf (visualization/test-viz) (let [new-pdf (clojure.java.io/as-file testviz.pdf)] (is (.exists new-pdf)) (is ( 10000 (- (System/currentTimeMillis) (.lastModified new-pdf))))))核心代码逐段解析构建符号计算图get-symbol用as-线程宏构建一个最简计算图数据变量 → Flatten → SoftmaxOutput(defn get-symbol [] (as- (sym/variable data) data (sym/flatten fl {:data data}) (sym/softmax-output softmax {:data data})))被#_注释掉的代码展示了更复杂的卷积网络形态Conv BatchNorm ReLU MaxPooling Flatten Softmax可取消注释自行实验#_(sym/convolution conv1 {:data data :kernel [3 3] :num-filter 32 :stride [2 2]}) #_(sym/batch-norm bn1 {:data data}) #_(sym/activation relu1 {:data data :act-type relu}) #_(sym/pooling mp1 {:data data :kernel [2 2] :pool-type max :stride [2 2]}) #_(sym/convolution conv2 {:data data :kernel [3 3] :num-filter 32 :stride [2 2]}) #_(sym/batch-norm bn2 {:data data}) #_(sym/activation relu2 {:data data :act-type relu}) #_(sym/pooling mp2 {:data data :kernel [2 2] :pool-type max :stride [2 2]}) #_(sym/fully-connected fc2 {:data data :num-hidden 10})这些符号构建函数来自 org.apache.clojure-mxnet.symbol由clojure.core/load gen/symbol加载生成每个操作符均对应 MXNet 原生算子。调用可视化 APItest-viz是可视化的核心(defn test-viz [] (let [dot (viz/plot-network (get-symbol) {data [1 1 28 28]} {:title foo :node-attrs {:shape oval :fixedsize false}})] (viz/render dot testviz ./)))流程分两步viz/plot-network把 Symbol 转成 GraphvizDot对象同时传入输入形状映射{data [1 1 28 28]}批大小 1、单通道、28×28 图像和绘图选项{:title foo :node-attrs {:shape oval :fixedsize false}}viz/render用 Graphviz 引擎把 Dot 对象渲染成testviz.pdf渲染到当前目录./。API 详解plot-network 与 render可视化 API 定义在 contrib/clojure-package/src/org/apache/clojure_mxnet/visualization.clj是对 Scala 包org.apache.mxnet.Visualizationscala-package/core/src/main/scala/org/apache/mxnet/Visualization.scala的 JVM 互操作封装。plot-network([sym shape-map {:keys [title node-attrs hide-weights] :as opts :or {title plot hide-weights true}}] ...) ([sym shape-map] (plot-network sym shape-map {}))参数说明参数类型含义默认值symSymbol待可视化的符号计算图必填shape-mapMap字符串 → 形状向量输入数据形状如{data [1 1 28 28]}必填:titleStringDOT 图的标题plot:node-attrsMap节点属性如{:shape oval :fixedsize false}空 Map:hide-weightsBoolean是否隐藏*_weight/*_bias等参数节点true底层实现Visualization.scala的关键逻辑形状推断若提供shape-map调用symbol.getInternals().inferShape(shape)推断所有中间节点输出形状再与listOutputs()一一对应构建shapeDict用于在边上标注各节点的输出形状若形状不完整会抛出Input shape is incompleteJSON 解析JSON.parseFull(symbol.toJson)读取符号图 JSON取nodes字段逐个处理节点样式默认节点属性为{:shape box :fixedsize true :width 1.3 :height 0.8034 :style filled}用户传入的node-attrs会覆盖默认值。不同类型算子使用不同配色cm调色板输入节点op null#8dd3c7浅青形状强制为ovalConvolution/FullyConnected#fb8072浅红Activation/LeakyReLU#ffffb3浅黄BatchNorm#bebada浅紫Pooling#80b1d3浅蓝Concat/Flatten/Reshape#b3de69浅绿Softmax#fccde5浅粉其他算子#fdb462浅橙自定义算子取attrs[op_type]作为标签算子标签卷积标签形如Convolution\n3x3/2x2, 32kernel/stride, num_filter池化标签形如Pooling\nmax, 2x2/2x2激活层标签为Activation\nrelu权重隐藏looksLikeWeight检查节点名是否以_weight、_bias、_beta、_gamma、_moving_var、_moving_mean结尾若是且hideWeights为真则加入hiddenNodes不再画节点和边建边对每个非null节点遍历inputs指向其输入节点边属性为dirback、arrowtailopen即箭头从输出指向输入若启用了形状绘制还会在边上附加label显示中间张量形状去掉 batch 维后的各维度x连接字符串。render([dot engine format filename path] (doto dot (.render engine format filename path))) ([dot filename path] (render dot dot pdf filename path))dotplot-network返回的 Dot 对象engine布局引擎支持dot、neato、twopi、circo、fdp、sfdp、patchwork、osageformat输出格式支持pdf、png、svg、eps、jpg等filenameDOT 源文件名输出文件为filename.formatpath输出目录。两参形式默认使用dot引擎渲染 PDF。底层 Dot.render 会先保存 DOT 源文件再执行engine -Tformat -O filepath系统命令调用 Graphviz 可执行文件若执行失败会抛出提示make sure the Graphviz executables are on your systems path。因此运行前必须确保系统已安装 Graphviz 且dot在 PATH 中。进阶用法渲染其他格式若想输出 PNG 而非 PDF可改用三参/五参形式例如(viz/render dot dot png testviz ./)隐藏权重与自定义节点默认隐藏*_weight/*_bias等参数节点可传:hide-weights false展示全部参数通过:node-attrs可调整所有节点的形状与尺寸(viz/plot-network sym {data [1 3 224 224]} {:title MyNet :node-attrs {:shape record :fixedsize false} :hide-weights false})组合更复杂的网络取消 core.clj 中被注释的卷积/批归一化/池化行即可生成包含多种算子配色的彩色网络拓扑图。小结通过lein run一条命令即可把 MXNet 符号计算图渲染为 Graphviz 图并输出testviz.pdf。整个过程分为构建 Symbol → plot-network 生成 Dot → render 调用 Graphviz 输出三步前者依赖符号 APIsymbol.clj后者由 Clojure 封装visualization.clj桥接 Scala 实现Visualization.scala。理解节点配色、形状推断与权重隐藏规则后你就能为任何自定义网络生成直观的架构图用于论文插图、模型调试与教学演示。【免费下载链接】mxnetLightweight, Portable, Flexible Distributed/Mobile Deep Learning with Dynamic, Mutation-aware Dataflow Dep Scheduler; for Python, R, Julia, Scala, Go, Javascript and more项目地址: https://gitcode.com/gh_mirrors/mxnet1/mxnet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门