报错原因:
- 在使用
model = nn.DataParallel(model,device_ids=[0,1])
加载模型之后,出现了这个错误:AttributeError: ‘DataParallel’ object has no attribute ‘****’ - 报错的地方在我后面调用
model
的一些层时,并没有那些层,输出经过nn.DataParallel
的模型参数后,发现每个参数前面多了module,应该是nn.DataParallel
将model转换成了model.module。
解决方法:
原:
encoder_id_id = list(map(id, model.embedding_net_id.classifier.parameters()))
改:
model = nn.DataParallel(model,device_ids=[0,1])
encoder_id_id = list(map(id, model.module.embedding_net_id.classifier.parameters()))
总结:
若对模型多卡训练并需要对某些层操作时,需要对调用模型的后面加一个.module