使用symbol得到的模型或者gluon的hybridize之后的模型包括一个.json
文件(网络结构)和.params
文件(参数),gluon可以使用net = gluon.SymbolBlock.imports(json, ['data'], params, ctx)
导入网络和参数,这样可以进行测试或者进一步训练。
但是如果只需要使用模型的其中一部分,比如只需要conv层,去掉所有fc层,或者再另外增加一些层, 这样直接导入就会比较复杂。正确的做法如下:
sym, arg_params, aux_params = mx.model.load_checkpoint("1.0.3", 40)#这里是model的名字和参数对应的epoch
layers = sym.get_internals()#得到所有的layers
outputs = layers['stage4_unit1_conv2_output']#选择输出层
inputs = layers['data']#选择输入层
net = gluon.SymbolBlock(outputs, inputs)#使用gluon的接口将其封装成一个新的net
net.