【发布时间】:2020-01-11 10:51:37
【问题描述】:
我没有任何没有数据并行化的问题,但是在我放了一行“model = nn.DataParallel(model)”之后,出现了错误消息“TypeError: 'list' object is not callable”。如果我推出那条该死的线,源代码就干净了。请帮帮我
我什么都做不了,只能发疯。我搜索了那个谷歌,有一些方法可以解决该错误消息,但我无能为力。因为 nn.Dataparallel 已被其他编码器使用。抱歉英语不是我的母语。
if use_cuda:
[[[model = nn.DataParallel(model)]]]
model = model.cuda()
criterion = criterion.cuda()
print('cuda is used')
我只是输入model = nn.DataParallel(model),然后错误就来了。
Traceback(最近一次调用最后一次): 文件“/home/scrcdeep2/YBJ/espnet_myself/Main.py”,第 119 行,在 训练(加载器,模型_,标准_,优化器_,使用_cuda_,预训练=无)
文件“/home/scrcdeep2/YBJ/espnet_myself/Main.py”,第 83 行,在 train 输出 = 模型(输入)
调用中的文件“/home/scrcdeep2/YBJ/lib/python3.5/site-packages/torch/nn/modules/module.py”,第 493 行 结果 = self.forward(*input, **kwargs) 文件“/home/scrcdeep2/YBJ/lib/python3.5/site-packages/torch/nn/parallel/data_parallel.py”,第 151 行,向前 副本 = self.replicate(self.module, self.device_ids[:len(inputs)])
文件“/home/scrcdeep2/YBJ/lib/python3.5/site-packages/torch/nn/parallel/data_parallel.py”,第 156 行,复制 返回复制(模块,设备ID)
文件“/home/scrcdeep2/YBJ/lib/python3.5/site-packages/torch/nn/parallel/replicate.py”,第 114 行,复制中 模块 = 列表(network.modules())
TypeError: 'list' 对象不可调用
【问题讨论】:
-
这意味着
nn.DataParallel不是一个函数而是一个列表。通过打印列表进行调查,查看nn对象文档/源代码等。 -
对不起...我不明白你到底在说什么。你能给我一个简单的例子吗?在 pytorch 文档中,没有我想知道的内容。我需要添加更多代码来并行化数据吗?
-
看nn.DataParallel documentation这确实是个函数。您能否编辑您的帖子以添加
print(type(nn.DataParallel))的结果(在尝试调用 DataParallel 之前调用此命令)?也做 x = f(x) 似乎是可疑的。 -
出来了。您说 x = f(x) 似乎是错误的,但几乎每个示例都与我相同。非常感谢您的回答,并为我简短的英语感到抱歉。好的,我会再次检查该文档。 -
查看您的个人资料我知道您是学生,所以也许您应该问老师或其他学生?我不是 pytorch 专家,所以恐怕我无法提供更多帮助。