概要
本节介绍MXNet中的Symbol(模块)。Symbol是MXNet中另一个重要的概念,可以通过 mxnet.symbol 或者 mxnet.sym 使用。一个symbol表示一个具有多输出的符号表达式,表达式由多个运算组成,运算可以是简单的矩阵和(“+”),也可以是一个神经网络层(比如卷积层)。一个运算可以有多个输入,产生一个或多个输出,同时也可以由隐变量。变量可以是一个等待绑定参数值的自由符号,也可以是其他symbol的某一个输出值。
MXNet中重要概念NDArray与numpy类似,操作上也比较简单就不单独说明了,之后代码中遇到会提及。另外,本节代码跳过了官方tutorial中存储部分以及卷积神经网络部分,有些说明部分没有摘录,感兴趣请参考官方教程
正文
基础操作
import mxnet as mx
###构造一个简单的表达式 a+b
a = mx.sym.Variable('a')
b = mx.sym.Variable('b')
###c没有人为指定名称,MXNet会自动命名一个不重复的名称,注意不一定是"C"
c = a + b
###下方的操作类似numpy
# elemental wise times
d = a * b
# matrix multiplication
e = mx.sym.dot(a, b)
# reshape
f = mx.sym.Reshape(d+e, shape=(1,4))
# broadcast
g = mx.sym.broadcast_to(f, shape=(2,4))
mx.viz.plot_network(symbol=g).view()
基础神经网络
除了上述基本的操作之外,Symbol还有一系列神经网络层,下面的代码构造了一个两层全连接的神经网络
###以下神经网络比较简单,就不单独说明了,其中relu是激活函数
# Output may vary
net = mx.sym.Variable('data')
net = mx.sym.FullyConnected(data=net, name='fc1', num_hidden=128)
net = mx.sym.Activation(data=net, name=