【问题标题】:I have a trouble after trying to parallelize data using nn.Dataparallel尝试使用 nn.Dataparallel 并行化数据后遇到问题
【发布时间】: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 专家,所以恐怕我无法提供更多帮助。

标签: pytorch typeerror


【解决方案1】:

我遇到了同样的问题,因为我设置了moules = [list]

我这样更改了我的代码:

def __init__(self, embedding_size, activation_function='relu'):
    super().__init__()
    self.act_fn = getattr(F, activation_function)
    self.embedding_size = embedding_size
    self.conv1 = nn.Conv2d(3, 32, 4, stride=2)
    self.conv2 = nn.Conv2d(32, 64, 4, stride=2)
    self.conv3 = nn.Conv2d(64, 128, 4, stride=2)
    self.conv4 = nn.Conv2d(128, 256, 4, stride=2)
    self.fc = nn.Identity() if embedding_size == 1024 else nn.Linear(1024, embedding_size)
    if not args.MultiGPU:
      self.modules = [self.conv1, self.conv2, self.conv3, self.conv4]

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 2021-06-08
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多