mxnet随笔-循环(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010255642/article/details/82384489

mxnet.ndarray.contrib.foreach(bodydatainit_states)

运行循环,在NDArrays在0维度上使用用户定义的计算

这个操作

这个操作符模拟了一个for循环,并且body有一个for循环迭代的计算。body以两个参数作为输入,并输出两个元素的元组,如下所示:

out, states = body(data1, states)

data1是NDArray的列表或NDArray,如果data是一个NDArray,则data1是一个NDArray,否则,data1是一个NDArrays的列表且有和data同样的大小。states是一个NDArrays的列表,有与init_states相同的大小。out是NDArray或NDArray的列表,它被连接为为foreach第一个输出。states来自body的最后执行,是foreach的第二个输出。

当输入数据是NDArray时,这个操作符所做的计算相当于下面的伪代码:

states = init_states outs = []  for i in data.shape[0]:
s = data[i] out, states = body(s, states) outs.append(out)

outs = stack(*outs)
Parameters:
  • body (a Python function.) – Define computation in an iteration.
  • data (an NDArray or a list of NDArrays.) – The input data.
  • init_states (an NDArray or nested lists of NDArrays.) – The initial values of the loopstates.
  • name (string.) – The name of the operator.
Returns:
  • outputs (an NDArray or nested lists of NDArrays.) – The output data concatenated from the output of all iterations.
  • states (an NDArray or nested lists of NDArrays.) – The loop states in the last iteration.

Examples

>>> step = lambda data, states: (data + states[0], [states[0] * 2])
>>> data = mx.nd.random.uniform(shape=(2, 10))
>>> states = [mx.nd.random.uniform(shape=(10))]
>>> outs, states = mx.nd.contrib.foreach(step, data, states)

猜你喜欢

转载自blog.csdn.net/u010255642/article/details/82384489