12. プログラミングモデル
Imperative (命令的) Declarative (宣言的)
a = mx.nd.ones((2,3))
b = mx.nd.ones((2,3))
c = a + b
d = - c
e = mx.nd.sin(c**2).T
f = mx.nd.maximum(a, c)
data = mx.symbol.Variable('data')
net1 = mx.symbol.FullyConnected(
data=data,
name='fc1',
num_hidden=10)
net1.list_arguments()
net2 = mx.symbol.Variable('data2')
net2 = mx.symbol.FullyConnected(
data=net2,
name='fc2',
num_hidden=10) composed =
net2(data2=net1, name='composed')
13. Imperative + Declarative
両者を組み合わせることで柔軟な書き方が可能
モデル更新処理を for ループで書くような記述もできる
texec = mx.module.Module(net)
for batch in train_data:
texec.forward(batch)
texec.backword()
for param, grad in zip(texec.get_params(), texec.get_grads()):
param -= 0.2 * grad