TypeError: cannot unpack non-iterable NoneType object(类型错误:无法解包非迭代的NoneType对象)
情况:使用pytorch训练模型,问题出现在 loss.backward()
这一行代码
网上查了很多资料,大家相同的错误来源不同,别人的解决方式没法解决我的问题。
没有系统学习 pytorch 语法就直接上手写代码,着实难受,所以放下bug,去学习了一下语法知识。
分享一篇不错的文章 深入理解 TORCH.NN
跟着练习了一遍懂了很多,然后一眼就看出自己代码的问题在哪里了。
原代码:
# Train and evaluate
model = HeteroRGCN(G, 8, 8, 8)
opt = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)
user_embedding, item_embedding = model(G)for epoch in range(100):for data in dataloader:user, item_p, item_n = data ···
修改后:
# Train and evaluate
model = HeteroRGCN(G, 8, 8, 8)
opt = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)for epoch in range(2):for data in dataloader:user_embedding, item_embedding = model(G)user, item_p, item_n = data ···
关键:修改了 user_embedding, item_embedding = model(G)
的位置
执行 model = HeteroRGCN(G, 8, 8, 8) 这一行代码的时候,是对模型进行初始化,即执行模型的 init 函数部分,
执行 user_embedding, item_embedding = model(G) 这一行代码的时候,是对模型进行前向传播,
(所以把他放在外面的时候,反向反向传播就认为是 NoneType 对象???)