gluon方式
symbol和module方式
import mxnet as mx
if __name__ == '__main__':
data = mx.sym.Variable('my_data')
conv = mx.sym.Convolution(data=data, num_filter=128, kernel=(3,3), pad=(1,1), name='conv1')
bn = mx.sym.BatchNorm(data=conv, name='bn1')
relu = mx.sym.Activation(data=bn, act_type='relu', name='relu1')
pool = mx.sym.Pooling(data=relu, kernel=(2,2), stride=(2,2), pool_type='max', name='pool1')
fc = mx.sym.FullyConnected(data=pool, num_hidden=2, name='fc1')
sym = mx.sym.SoftmaxOutput(data=fc, name='softmax')
# symbol方式
exec = sym.bind(mx.cpu(), args={'my_data': mx.nd.arange(300).reshape(1,3,10,10)})
# 这里推理只是举例,因为只赋值了my_data。 conv1_weight, conv1_bias, bn1_gamma, bn1_beta, bn1_moving_mean, bn1_moving_var, fc1_weight, fc1_bias都没有赋值
result = exec.forward()
# module方式
mod = mx.module.Module(symbol=sym, label_names=None)
mod.bind(for_training=False, data_shapes=[("data", shape)])
# data_batch是mxnet.io.DataBatch
mod.forward(data_batch, is_train=False)