mxnet symbol 解析
mxnet symbol类定义:https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/symbol/symbol.py
对于一个symbol,可分为non-grouped和grouped。且symbol具有输出,和输出属性。比如,对于Variable而言,其输入和输出就是它自己。对于c = a+b,c的内部有个_plus0 symbol,对于_plus0这个symbol,它的输入是a,b,输出是_plus0_output。
class Symbol(SymbolBase):"""Symbol is symbolic graph of the mxnet."""# disable dictionary storage, also do not have parent type.# pylint: disable=no-member其中,Symbol还不是最基础的类,Symbol类继承了SymbolBase这个类。
而SymbolBase这个类实际是在
https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/symbol/_internal.py
中引用的,通过以下方式引用:
from .._ctypes.symbol import SymbolBase, _set_symbol_class, _set_np_symbol_class而SymbolBase的定义是在:https://github.com/apache/incubator-mxnet/blob/master/python/mxnet/_ctypes/symbol.py
这里暂时先不管SymbolBase,这应该是是python调用c++接口创建的一个类。
回到Symbol中来,对于mxnet符号式编程而言,定义的任何网络,或者变量,都是symbol类型,所以,了解这个类就显得很重要。
Symbol类中有几类函数:
1、普通函数
2、__xx__ 函数
3、@property 修饰的函数
4、函数名为xx,实际调用op.xx的函数
1、普通函数
attr
根据key返回symbol对应的属性字符串,只对non-grouped symbols起作用。
list_attr
得到symbol的所有属性
attr_dict
递归的得到symbol和孩子的属性
_set_attr
通过key-value方式,对attr进行设置
get_internals
获取symbol的所有内部节点symbol,是一个group类型(包括输入,输出节点symbol)。如果我们想阶段一个network,应该获取它某内部节点的输出,这样才能作为新增加的symbol的输入。
get_children
获取当前symbol输出节点的inputs
list_arguments
列出当前symbol的所有参数(可以配合call对symbol进行改造)
list_outputs
列出当前smybol的所有输出,如果当前symbol是grouped类型,回遍历输出每一个symbol的输出
list_auxiliary_states
列出symbol中的辅助状态参数,比如BN
list_inputs
列出当前symbol的所有输入参数,和辅助状态,等价于 list_arguments和 list_auxiliary_states
2、__xx__函数
__repr__
对于gruop symbol,它是没有name属性的,print或者回车,结果就是其内部symbol节点的name
__iter__(self):
普通的symbol长度都只有1,只有Grouped 的symbol,长度才大于1:return (self[i] for i in range(len(self)))
算数及逻辑运算:
+,-,*, /,%,abs,**, 取负(-x),==,!=,>,>=,<,<=, # 使用时,要注意Broadcasting 是否支持
__copy__和__deep_copy__
通过deep_copy,创建一个深拷贝,返回输入对象的一个拷贝,包括它当前所有参数的当前状态,比如weight,bias等
__call__
表示symbol的实例是一个可调用对象。可以返回一个新的symbol,这个symbol继承了之前symbol的权重啥的,但是和之前的symbol是不同的对象,可以输入参数对symbol进行组合。
这里,我改变了b,将其输入参数的x的值变为了tt。
__getitem__
如果symbol的长度只有1,那么返回的就是它的输出symbol,如果symbol长度>1,可以通过切片访问其输出symbol,返回的也是一个Group symbol。symbol可以分为non-grouped和grouped。
获取内部节点symbol还可以输入str,但输入的str必须属于list_outputs(),
symbol.py 除了Symbol这个类之外,还有游离在外的函数:
1、 def var(name, attr=None, shape=None, lr_mult=None, wd_mult=None, dtype=None,init=None, stype=None, **kwargs):"""Creates a symbolic variable with specified name. # for back compatibility Variable = var # 调用 mx.sym.var和mx.sym.Variable 等价2、 def Group(symbols, create_fn=Symbol):"""Creates a symbol that contains a collection of other symbols, grouped together.A classic symbol (`mx.sym.Symbol`) will be returned if all the symbols in the listare of that type; a numpy symbol (`mx.sym.np._Symbol`) will be returned if all thesymbols in the list are of that type. A type error will be raised if a list of mixedclassic and numpy symbols are provided.Example------->>> a = mx.sym.Variable('a')>>> b = mx.sym.Variable('b')>>> mx.sym.Group([a,b])<Symbol Grouped>Parameters----------symbols : listList of symbols to be grouped.3、 def load(fname):"""Loads symbol from a JSON file.You also get the benefit being able to directly load/save from cloud storage(S3, HDFS).Returns-------sym : SymbolThe loaded symbol.See Also--------Symbol.save : Used to save symbol into file. # 输入文件可以是hdfs文件 4、 数学相关函数,输入可为scalar或者是symbol def pow(base, exp):"""Returns element-wise result of base element raised to powers from exp element.base 和 exp可以是数字或者symbol # def power(base, exp): # 实际调用pow def maximum(left, right): def minimum(left, right): def hypot(left, right): # 返回直角三角形的斜边 def eye(N, M=0, k=0, dtype=None, **kwargs):"""Returns a new symbol of 2-D shpae, filled with ones on the diagonal and zeros elsewhere. # 返回2D shape的symbol,对角线为1,其余位置为0 def zeros(shape, dtype=None, **kwargs):"""Returns a new symbol of given shape and type, filled with zeros. # 返回一个shape的全0 symbol def ones(shape, dtype=None, **kwargs):"""Returns a new symbol of given shape and type, filled with ones. def full(shape, val, dtype=None, **kwargs):"""Returns a new array of given shape and type, filled with the given value `val`. def arange(start, stop=None, step=1.0, repeat=1, infer_range=False, name=None, dtype=None):"""Returns evenly spaced values within a given interval. def arange(start, stop=None, step=1.0, repeat=1, infer_range=False, name=None, dtype=None):"""Returns evenly spaced values within a given interval. def linspace(start, stop, num, endpoint=True, name=None, dtype=None):"""Return evenly spaced numbers within a specified interval. def histogram(a, bins=10, range=None, **kwargs):"""Compute the histogram of the input data. def split_v2(ary, indices_or_sections, axis=0, squeeze_axis=False):"""Split an array into multiple sub-arrays.总结
以上是生活随笔为你收集整理的mxnet symbol 解析的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 构造函数。
- 下一篇: 云服务器维护包含哪些,云服务器维护内容