本文主要是介绍MXNet报TypeError: TypeError: Changing attribute type for output from,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
错误描述
TypeError: Changing attribute type for output from <class 'mxnet.gluon.nn.basic_layers.HybridSequential'> to <class 'mxnet.gluon.nn.basic_layers.Dense'>is not allowed.
错误原因
在使用gluoncv的model zoo上训练好模型进行微调的时候,修改输出层网络的输出类别的数量时报错
finetune_net.output = gluon.nn.Dense(args.classes)
将输出层改成了上面的代码,从错误信息中可以看出来,原网络的outpu层是一个HybridSequential,而我现在却给它赋值了一个Dense所以导致报错。
解决办法
- 输出output观察网络结构
HybridSequential((0): Conv2D(1280 -> 1000, kernel_size=(1, 1), stride=(1, 1), bias=False)(1): Flatten
)
- 修改output层
finetune_net = get_model(args.net,pretrained=True)with finetune_net.name_scope():if type(finetune_net.output) is gluon.nn.Dense:finetune_net.output = gluon.nn.Dense(args.classes)elif type(finetune_net.output) is gluon.nn.HybridSequential:#这里修改的需要和你输出原网络的结构类似output = gluon.nn.HybridSequential()output.add(gluon.nn.Conv2D(args.classes,kernel_size=(1,1),strides=(1,1),use_bias=False))output.add(gluon.nn.Flatten())finetune_net.output = output
这篇关于MXNet报TypeError: TypeError: Changing attribute type for output from的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!