MXNET的符号API
本节中,我将介绍MXNET主要的符号API。符号是神经网络的构件。每个符号可以被视为具有前向和后向操作的功能对象。单个符号可以组成更复杂的符号,从而成为神经网络。有关Symbolic API的更详细的教程,请参阅:http://mxnet.io/api/python/symbol.html
符号变量
mxnet.symbol.Variable(name,attr=None,shape=None)作用:创建具有指定名称的符号变量。
参数:
返回:
- name (str) - 变量的名称。
- attr (dict of string - > string) - 要在变量上设置的其他属性。
- shape (tuple) - 可以选择指定变量的形状。 这将在形状推理期间使用。 如果用户在调用形状推断时使用关键字参数为此变量指定了不同的形状,则此形状信息将被忽略。
- variable - 创建的变量符号。
返回类型:Symbol
全连接层和卷积层
全连接层
mxnet.symbol.FullyConnected(*args,**kwargs)作用:将矩阵乘法应用于输入,然后添加偏置。它将形状(batch_size,input_dim)的输入映射到(batch_size,num_hidden)的形状。可学习参数包括线性变换的权重和可选的偏置向量。
参数:
返回:
- data (Symbol) - 将数据输入到FullyConnectedOp。
- weight (Symbol) - 权重矩阵。
- bias (Symbol) - 偏置参数。
- num_hidden (int,必须) - 输出的隐藏节点数。
- no_bias (boolean,可选,default = False) - 是否禁用偏置参数。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
卷积层
mxnet.symbol.Convolution(*args,**kwargs)作用:将卷积应用于输入,然后添加偏置。
参数:
返回:
- data (Symbol) - 输入数据到ConvolutionOp。
- weight (Symbol) - 权重矩阵。
- bias (Symbol) - 偏置参数。
- kernel(Shape(tuple),必须) - 卷积核大小:(y,x)或(d,y,x)
- stride (Shape(tuple),可选,default =(1,1)) - 卷积窗口移动的步长:(y,x)or(d,y,x)
- dilate (Shape(tuple),可选,default =(1,1)) - 卷积扩张:(y,x)
- pad (Shape(tuple),可选,默认=(0,0)) - 卷积填充:(y,x)或(d,y,
- num_filter (int(非负),必须) - 卷积过滤器(通道)号
- num_group (int(非负数),可选,默认值= 1) - 组数。这个选项不支持CuDNN,你可以使用SliceChannel到num_group,应用卷积和concat来实现相同的需要。
- workspace(long(非负),可选,默认值= 1024) - 卷积的MB工作空间(MB)。
- no_bias (boolean,可选,default = False) - 是否禁用偏置参数。
- cudnn_tune (_ {'fastest','limitedworkspace','off'},可选,default ='off') - 是否通过运行性能测试找到卷积算法。更好的speed.auto调整被默认关闭。设置环境varialbe MXNET_CUDNN_AUTOTUNE_DEFAULT = 1默认打开。
- cudnn_off (boolean,可选,default = False) - 关闭cudnn。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
反卷积层
mxnet.symbol.Deconvolution(*args,**kwargs)作用:将反卷积应用于输入,然后添加偏置。
参数:
返回:
- data (Symbol) - 输入数据到DeconvolutionOp。
- weight (Symbol) - 权重矩阵。
- bias (Symbol) - 偏置参数。
- kernel (Shape(tuple),必须) - 反卷积核大小:(y,x)
- stride (Shape(tuple),可选,default =(1,1)) - 反卷积窗移动步长:(y,x)
- pad (Shape(tuple),可选,默认=(0,0)) - 用于反卷积的pad:(y,x),好的数字是:(kernel-1)/ 2,如果target_shape set ,pad将被忽略并自动计算
- adj (Shape(tuple),可选,default =(0,0)) - 输出形状的调整:(y,x),如果target_shape set,adj将被忽略,
- target_shape (Shape(tuple),可选,default =(0,0)) - 输出形状为targe shape:(y,x)
- num_filter (int(非负数),必须) - 反卷积滤波器(通道)数
- num_group (int(非负数),可选,默认= 1) - 组分区数
- workspace(long(非负),可选,默认值= 512) - 反褶积工作空间(MB)
- no_bias (boolean,可选,default = True) - 是否禁用偏置参数。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
池化层
mxnet.symbol.Pooling(*args,**kwargs)
作用:对输入执行空间合并。参数:
返回:
- data (Symbol) - 输入数据到池操作符。
- global_pool (boolean,可选,default = False) - 忽略内核大小,根据当前输入要素图进行全局池化。这对于具有不同形状的输入有用
- kernel(Shape(tuple),required) - 合并内核大小:(y,x)或(d,y,x)
- pool_type ( {'avg','max','sum'},required) - 要应用的池化类型。
- pooling_convention ( {'full','valid'},可选,default ='valid') - 要应用的池规则.kValid是Mxnet的默认设置,并舍弃输出池大小.kFull是兼容Caffe和舍入输出池大小。
- stride (Shape(tuple),optional,default =(1,1)) - 池化窗口移动的步长(y,x)or(d,y,x)
- pad (Shape(tuple),optional,default =(0,0)) - 池化窗的填充(y,x)or(d,y,x)
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
循环神经网络层
mxnet.symbol.RNN(*args,**kwargs)作用:应用循环层来输入。
参数:
返回:
- data (Symbol) - 将数据输入到RNN
- parameter(Symbol) - 矢量所有RNN可训练参数连接
- state (Symbol) - RNN的初始隐藏状态
- state_cell (Symbol) - LSTM网络的初始单元格状态(仅限对于LSTM)
- state_size (int(non-negative),required) - 每个层的状态大小
- num_layers (int(非负数),required) - 堆叠层数
- bidirectional (boolean,可选,default = False) - 是否使用双向循环层
- mode({'gru','lstm','rnn_relu','rnntanh'},required) - 计算的RNN类型
- p (float,可选,默认值= 0) - 丢弃概率,在训练时被丢弃的输入的分数
- state_outputs (boolean,可选,default = False) - 是否将状态作为符号输出。
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
激活层
激活层
mxnet.symbol.Activation(*args,**kwargs)作用:元素激活函数。
支持以下激活类型(操作按元素应用于输入张量的每个标量):
- relu :整流线性单位,
y=max(x,0)
参数:
有关参数的其他激活,请参见 LeakyReLU 。
返回:
- act_type ( {'relu','sigmoid','softrelu','tanh'},必须) - 要应用的激活函数。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
softmax激活层
mxnet.symbol.SoftmaxActivation(*args,**kwargs)作用:应用softmax激活输入。这是为内部层。对于输出(损耗层),请使用SoftmaxOutput。如果mode = instance,此运算符将为批处理中的每个实例计算一个softmax;这是默认模式。如果mode = channel,此运算符将在每个实例的每个位置计算num_channel类softmax;这可以用于完全卷积网络,图像分割等。
参数:
返回:
- data (Symbol) - 输入数据到激活功能。
- mode( {'channel','instance'},可选,默认='instance') - Softmax模式。如果设置为instance,此运算符将为batch中的每个实例计算一个softmax;这是默认模式。如果设置为channel,此运算符将在每个实例的每个位置计算num_channel类softmax;这可以用于完全卷积网络,图像分割等。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
LeakyReLU层
mxnet.symbol.LeakyReLU(*args,**kwargs)作用:应用激活功能输入。
参数:
返回:
- data (Symbol) - 输入数据到激活功能。
- act_type ( {'elu','leaky','prelu','rrelu'},可选,default ='leaky') - 要应用的激活函数。
- slope (float,可选,默认值= 0.25) - 激活的初始斜率。 (仅适用于泄漏和elu)
- lower_bound (float,可选,默认值= 0.125) - 随机斜率的下限。 (仅适用于rrelu)
- upper_bound (float,可选,default = 0.334) - 随机斜率的上限。 (仅适用于rrelu)
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
输出层
线性回归输出层
mxnet.symbol.LinearRegressionOutput(*args,**kwargs)
作用:对最终输出使用线性回归,这用于网的最终输出。参数:
返回:
- data (Symbol) - 输入数据到函数。
- label (Symbol) - 输入标签到函数。
- grad_scale (float,optional,default = 1) - 梯度缩放因子
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
逻辑回归输出层
mxnet.symbol.LogisticRegressionOutput(*args,**kwargs)
作用:对最终输出使用Logistic回归,这用于网络的最终输出。逻辑回归适用于二进制分类或概率预测任务。参数:
返回:
- data (Symbol) - 输入数据到函数。
- label (Symbol) - 输入标签到函数。
- grad_scale (float,optional,default = 1) - 梯度缩放因子
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
MAE输出层
mxnet.symbol.MAERegressionOutput(*args,**kwargs)
作用:对最终输出使用平均绝对误差回归,这用于网的最终输出。参数:
返回:
- data (Symbol) - 输入数据到函数。
- label (Symbol) - 输入标签到函数。
- grad_scale (float,optional,default = 1) - 梯度缩放因子
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
softmax输出层
mxnet.symbol.SoftmaxOutput(*args,**kwargs)作用:对输入执行softmax变换,使用logloss执行backprop。
参数:
返回:
- data (Symbol) - 输入数据到softmax。
- label (Symbol) - 标签数据,也可以是概率值与数据形状相同
- grad_scale (float,可选,default = 1) - 梯度缩放因子
- ignore_label (float,可选,默认值= -1) - 标签值将在向后被忽略(仅在use_ignore设置为true时有效)。
- multi_output (boolean,可选,默认值= False) - 如果设置为true,对于(n,k,x_1,...,x_n)维输入张量,softmax将生成n x_1 x_n输出,每个都有k个类
- use_ignore (boolean,可选,default = False) - 如果设置为true,ignore_label值将不会影响向后梯度
- preserve_shape (boolean,可选,默认= False) - 如果为真,对于(n_1,n_2,...,n_d,k)维输入张量,softmax将生成(n1,n2, n_d,k)输出,将k个类标准化为最后一个维度。
- normalization ( {'batch','null','valid'},可选,default ='null') - 如果设置为null,op将不对输出梯度执行任何操作。 如果设置为batch,op将通过除以batch大小以归一化梯度。如果设置为valid,op将通过除以样本数来归一化梯度
- out_grad (boolean,可选,default = False) - 对输出梯度应用加权
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
SVM输出层
mxnet.symbol.SVMOutput(*args,**kwargs)作用:支持向量机输出层,L1-SVM或L2-SVM
参数:
返回:
- data (Symbol) - 将数据输入到svm。
- label (Symbol) - 标签数据。
- margin (float,可选,default = 1) - 调整DType(param_.margin)的激活大小
- regularization_coefficient (float,可选,default = 1) - 正则系数
- use_linear (boolean,可选,default = False) - 如果设置为true,则使用L1-SVM目标函数。默认使用L2-SVM目标
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
Reshape层
Reshape层
mxnet.symbol.Rechape(*args,**kwargs)
作用:重新塑造目标形状的输入参数:
返回:
- data (Symbol) - 输入数据以重塑。
- target_shape (Shape(tuple),可选,default =(0,0)) - (不推荐,请使用shape。)目标新形状。一个并且只有一个dim可以是0,在这种情况下,将从剩余的dims中推断出
- keep_highest (boolean,可选,默认值= False) - (不推荐,请使用shape。)是否保持最高的dim不变。如果设置为true,则target_shape中的第一个dim被忽略,
- shape(,可选,默认=()) - 目标新形状。如果dim是相同的,将其设置为0 \。如果dim设置为-1,则将从其余dims中推断出。一个且只有一个dim可以是-1
- reverse (boolean,可选,default = False) - 是否匹配形状从向后。如果reverse为true,则将从后面搜索 shape 参数中的0个值。例如,原始形状是(10,5,4),形状参数是(-1,0)。如果reverse为true,则新形状应为(50,4)。否则将是(40,5)。
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
Cast层
mxnet.symbol.Cast(*args,**kwargs)作用:将数组转换为不同的数据类型。
参数:
返回:
- data (Symbol) - 输入要投射的数据。
- dtype ( {'float16','float32','float64','int32','uint8'},必须) - 目标数据类型。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
Concat层
mxnet.symbol.Concat(*args,**kwargs)作用:在指定的坐标轴上(defaut为1)上执行特征拼接,此函数支持可变长度的位置输入。
参数:例子:
返回:
- data (Symbol [] ) - 连接的张量列表
- num_args (int,必须) - 要拼接的输入数。
- dim (int,可选,默认值为'1') - 要拼接的维。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
>>> import mxnet as mx
>>> data = mx.nd.array(range(6)).reshape((2,1,3))
>>> print "input shape = %s" % data.shape
>>> print "data = %s" % (data.asnumpy(), )
input shape = (2L, 1L, 3L)
data = [[[ 0\. 1\. 2.]]
[[ 3\. 4\. 5.]]]
>>> # concat two variables on different dimensions
>>> a = mx.sym.Variable('a')
>>> b = mx.sym.Variable('b')
>>> for dim in range(3):
... cat = mx.sym.Concat(a, b, dim=dim)
... exe = cat.bind(ctx=mx.cpu(), args={'a':data, 'b':data})
... exe.forward()
... out = exe.outputs[0]
... print "concat at dim = %d" % dim
... print "shape = %s" % (out.shape, )
... print "results = %s" % (out.asnumpy(), )
concat at dim = 0
shape = (4L, 1L, 3L)
results = [[[ 0\. 1\. 2.]]
[[ 3\. 4\. 5.]]
[[ 0\. 1\. 2.]]
[[ 3\. 4\. 5.]]]
concat at dim = 1
shape = (2L, 2L, 3L)
results = [[[ 0\. 1\. 2.]
[ 0\. 1\. 2.]]
[[ 3\. 4\. 5.]
[ 3\. 4\. 5.]]]
concat at dim = 2
shape = (2L, 1L, 6L)
results = [[[ 0\. 1\. 2\. 0\. 1\. 2.]]
[[ 3\. 4\. 5\. 3\. 4\. 5.]]]
ElementWiseSum层
mxnet.symbol.ElementWiseSum(*args,**kwargs)作用:对所有输入执行逐元素求和。 此功能支持可变长度的位置输入。
参数:
返回:
- num_args (int,必须) - 要求和的输入数。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
Embedding层
mxnet.symbol.Embedding(*args,**kwargs)
作用:将整数索引映射到向量表示(嵌入)。这些嵌入是可学习的参数。对于形状(d1,...,dK)的输入,输出形状为(d1,...,dK,output_dim)。所有输入值应为 [0,input_dim)范围内的整数。参数:
返回:
- data (Symbol) - 输入数据到EmbeddingOp。
- weight (Symbol) - 包含权重矩阵。
- input_dim (int,required) - 输入索引的词汇大小。
- output_dim (int,required) - 嵌入向量的维数。
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
Flatten层
mxnet.symbol.Flatten(*args,**kwargs)作用:通过高维tensor输入转换为2D矩阵。比如 (d1,d2,...,dK)的张量被展平为(d1,d2 ... dK)矩阵。
参数:例子:
返回:
- data (Symbol) - 输入要展平的数据。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
>>> data = Variable('data') # say this is 4D from some conv/pool
>>> flatten = Flatten(data=data, name='flat') # now this is 2D
>>> SymbolDoc.get_output_shape(flatten, data=(2, 3, 4, 5))
{'flat_output': (2L, 60L)}
>>> test_dims = [(2, 3, 4, 5), (2, 3), (2,)]
>>> op = Flatten(name='flat')
>>> for dims in test_dims:
... x = test_utils.random_arrays(dims)
... y = test_utils.simple_forward(op, flat_data=x)
... y_np = x.reshape((dims[0], numpy.prod(dims[1:])))
... print('%s: %s' % (dims, test_utils.almost_equal(y, y_np)))
(2, 3, 4, 5): True
(2, 3): True
(2,): True
Group层
mxnet.symbol.Group(symbols)作用:创建将符号分组在一起的符号。
参数:
返回:
- symbol(list) - 要分组的符号列表。
- sym - 创建的组符号。
返回类型: Symbol
SliceChannel层
mxnet.symbol.SliceChannel(*args,**kwargs)作用:沿指定轴均等地切割输入
参数:
返回:
- num_outputs (int,必须) - 要分割的输出数。
- axis(int,可选,默认值='1') - 沿切片的尺寸。
- squeeze_axis (boolean,可选,default = False) - 如果为true并且切片维度变为1,则挤压该维度。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
SwapAxis层
mxnet.symbol.SwapAxis(*args,**kwargs)作用:交换Symbol的两个axis,其作用相当于弱化版的theano的dimshuffle。
参数:
返回:
- data (Symbol) - 将数据输入到SwapAxisOp。
- dim1 (int(非负数),可选,默认值= 0) - 要交换的第一个轴。
- dim2 (int(非负数),可选,默认值= 0) - 要交换的第二个轴。
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
Upsampling层
mxnet.symbol.UpSampling(*args,**kwargs)作用:执行最近邻域/双线性采样到输入此功能支持位置输入的可变长度。
参数:
返回:
- data (Symbol [] ) - 上采样的张量数组
- scale (int(非负数),必须) - 向上抽样标度
- num_filter (int(非负数),可选,默认值= 0) - 输入过滤器。仅由双线性sample_type使用。
- sample_type ( {'bilinear','nearest'},必须) - 上采样方法
- multi_input_mode ( {'concat','sum'},可选,default ='concat') - 如何处理多个输入。连接意味着沿着通道维度连接上采样图像。求和装置将所有图像相加在一起,仅用于最近邻上采样。
- num_args (int,必须) - 要上采样的输入数。对于最近邻上采样,这可以是1-N;输出的大小将是(scale h_0,scale w_0),所有其他输入将被上采样到相同的大小。对于双线性上采样,这必须是2; 1个输入和1个权重。
- workspace(long(非负),可选,默认值= 512) - 反褶积工作空间(MB)
- name (string,可选.) - 结果符号的名称。
- symbol - 结果符号。
返回类型:Symbol
Regularization层
BatchNorm层
mxnet.symbol.BatchNorm(*args, **kwargs)
作用:将批次标准化应用于输入。参数:
返回:
- data (Symbol) - 输入数据以进行批次标准化
- eps (float,可选,默认值= 0.001) - Epsilon防止div 0
- momentum (float,可选,默认值= 0.9) - 移动平均值的动量
- fix_gamma (boolean,optional,default = True) - 训练时修正gamma
- use_global_stats (boolean,可选,default = False) - 是否使用全局移动统计,而不是使用本地批处理。 这将强制改变批处理规范为缩放移位算子。
- name (string,optional.) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
Dropout层
mxnet.symbol.Dropout(*args,**kwargs)
作用:对输入应用dropout。 在训练期间,输入的每个元素随机地以概率p设置为零。 然后整个张量被重新缩放1 /(1-p),以保持期望与应用dropout之前相同。 在测试时间期间,这表现为恒等映射。参数:
返回:
- data(符号) - 输入数据到dropout。
- p(float,optional,default = 0.5) - 在训练时丢弃的比例
- name(字符串,可选。) - 结果符号的名称。
- symbol - 结果符号。 返回类型:Symbol
没有评论:
发表评论