如何修复错误“ TypeError:forward()...-CUDA

时间:2019-08-07 07:48:36

标签: python pytorch

对于我的学士论文,我需要使用GPU和CUDA用一些音乐相似性数据训练网络。

试图用不同的方法多次解决该问题,但没有一个起作用。

use_cuda = torch.cuda.is_available()

BSG_model = bayesian_skipgram(V, EMBEDDING_DIM)

if use_cuda:
    BSG_model.cuda()
optimizer = torch.optim.Adam(BSG_model.parameters(), lr=0.005)
BSG_model.train()
loss_progress = []
iter_time = time.time()

dataloader = DataLoader(data, batch_size=16, shuffle=True)

print("N_batches", len(dataloader))

for epoch in range(1):
    for i, batch in enumerate(dataloader):
        batch_start = time.time()
        main_word = batch[:,0]
        context_word = batch[:,1:]

    #print("Main word:,", main_word.shape, context_word.shape)


    optimizer.zero_grad()

    if use_cuda:
        loss = BSG_model.forward(main_word.cuda(), context_word.cuda(), use_cuda=True)
    else:
        loss = BSG_model.forward(main_word, context_word)

    loss.backward()
    optimizer.step()
    batch_end = time.time() - batch_start
    if i % 10 == 0:
        print("epoch, batch ", epoch, i)
        loss_progress.append(loss.item())  
        print(time.time()-iter_time)
        print(loss)
        iter_time = time.time()

“预期结果应该是模型开始训练嵌入...” “输出如下:”

TypeError                                 Traceback (most recent call last)
<ipython-input-36-c69aba816e22> in <module>()
     34 
     35         if use_cuda:
---> 36             loss = BSG_model.forward(main_word.cuda(), context_word.cuda(), use_cuda=True)
     37         else:
     38             loss = BSG_model.forward(main_word, context_word)

 TypeError: forward() got an unexpected keyword argument 'use_cuda'

1 个答案:

答案 0 :(得分:3)

错误消息很容易解释:

  

TypeError:forward()获得了意外的关键字参数'use_cuda'

您这样调用forward函数

oss = BSG_model.forward(main_word.cuda(), context_word.cuda(), use_cuda=True)

,其中有两个positional arguments(main_word.cuda(), context_word.cuda()和一个keyword arguementuse_cuda=True

关键字参数表示在声明/定义函数时,它具有一个相同名称的参数。例如:

def forward(self, word, context, use_cuda):
  ...

是带有forward参数的use_cuda函数的声明。

但是,似乎您正在使用forward关键字参数调用use_cuda,但是您使用的函数forward却没有{strong>没有 }}争论不休!

请仔细查看use_cuda函数的定义方式。