对于我的学士论文,我需要使用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'
答案 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 arguement:use_cuda=True
。
关键字参数表示在声明/定义函数时,它具有一个相同名称的参数。例如:
def forward(self, word, context, use_cuda):
...
是带有forward
参数的use_cuda
函数的声明。
但是,似乎您正在使用forward
关键字参数调用use_cuda
,但是您使用的函数forward
却没有{strong>没有 }}争论不休!
请仔细查看use_cuda
函数的定义方式。