MxNet系列——how_to——visualize_graph

本文介绍了如何使用MXNet中的mx.viz.plot_network函数将神经网络可视化为计算图。通过一个线性矩阵分解神经网络的例子展示了如何创建计算图,并在Jupyter Notebook中进行展示。

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


如何将神经网络可视化为计算图

该章节描述了如何在MXNet中使用在mx.viz.plot_network来可视化(使用MXNet构建的)神经网络。mx.viz.plot_network有助于将神经网络表示成一个计算图。其中,从输入节点开始计算;从输出节点读取结果。

前提条件

可视化网络需要 Jupyter NotebookGraphviz 库。
务必按照 installation instructions 来设置MXNet和上述的依赖包。

可视化神经网络

mx.viz.plot_network 的输入包括:定义网络的 Symbol,计算图中的节点属性和节点形状参数(可选)。输出一个计算图。

下面我们尝试可视化一个用于线性矩阵分解的神经网络:

  • 启动 Jupyter notebook 服务器
jupyter notebook
  • 在浏览器中访问 Jupyter Notebook - http://localhost:8888/.
  • 创建一个新的 notebook - “File -> New Notebook -> Python 2”
  • 复制并运行下面的代码,以可视化网络。
import mxnet as mx #导入MXNet
#创建3个符号变量
user = mx.symbol.Variable('user')
item = mx.symbol.Variable('item')
score = mx.symbol.Variable('score')

# 设置虚拟的维度
k = 64
max_user = 100
max_item = 50

# user feature lookup ???
user = mx.symbol.Embedding(data = user, input_dim = max_user, output_dim = k)

# item feature lookup ???
item = mx.symbol.Embedding(data = item, input_dim = max_item, output_dim = k)

# 通过内积(逐像素乘积,并求和)来进行预测
net = user * item #逐像素乘积
net = mx.symbol.sum_axis(data = net, axis = 1) #求和
net = mx.symbol.Flatten(data = net) #展开(成向量的形式)

# 损失层
net = mx.symbol.LinearRegressionOutput(data = net, label = score)

# 可视化网络
mx.viz.plot_network(net)

结果(计算图)如下图所示:

参考

`torch gather` 和 MXNet的`F.gather_nd` 都是用来从张量中选取特定索引元素的功能,但在使用上有一些细微差别。 1. **PyTorch (torch)**: `gather`函数主要用于沿着给定维度`dim`获取指定索引处的元素。它接受两个参数,第一个参数是源张量(`input`),第二个参数是一个长度匹配源张量该维度的整数切片(`index`)。例如,如果你有一个三维张量和一维索引,你可以选择每个索引对应的列。输出的张量将与输入的形状相同,除了指定的维度会变为1。 ```python input = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) index = torch.tensor([0, 1]) output = torch.gather(input, dim=1, index=index) # 输出: tensor([[1, 4], # [5, 8]]) ``` 2. **MXNet (F.gather_nd)**: `F.gather_nd`与`torch`的`gather`类似,但它可以处理更高维度的索引,允许你通过多个索引来取出多维张量的元素。这个函数需要一个数据张量`(data)`、一个形状匹配的数据张量`(indices)`作为索引以及一个轴`(axis)`。这个函数返回的是一个由索引指定元素组成的张量,形状是 `(indices.shape[:-1] + data.shape[axis+1:])`。 ```python import mxnet as mx data = mx.nd.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) indices = mx.nd.array([[0, 1], [1, 0]]) # 二维索引 output = mx.nd.F.gather_nd(data, indices) # 输出: [[1, 3], [6, 5]] ``` **区别总结**: - PyTorch的`gather`更适用于单个或低维度索引的情况。 - MXNet的`F.gather_nd`支持高维度或多维索引,适合提取多位置的元素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值