《第八章》
8.1命令式和符号式混合编程
y = compile(prog, '', 'exec')
exec(y)class HybridNet(nn.HybridBlock):
def __init__(self, **kwargs):
super(HybridNet, self).__init__(**kwargs)
self.hidden = nn.Dense(10)
self.output = nn.Dense(2)
# 是hybrid_forward而不是forward,且需要F来决定使用哪个类
# MXNet有基于命令式编程的NDArray类(默认)和基于符号式编程的Symbol类。
def hybrid_forward(self, F, x):
print('F: ', F)
print('x: ', x)
x = F.relu(self.hidden(x))
print('hidden: ', x)
return self.output(x)
net = HybridNet()
net.initialize()
x = nd.random.normal(shape=(1, 4))
net.hybridize() # 能提升性能。
net(x)
net(x)
# 在hybrid_forward函数里,相同输入和中间输出全部变成了Symbol类型,再次前向后不再打印输出。
# 对于原地操作a += b和a[:] = a + b(需改写为a = a + b)8.2异步计算
8.3自动并行计算
8.4多GPU计算
8.5多GPU简洁计算
最后更新于