运行slowfast的时候显示TypeError: cannot unpack non-iterable NoneType object

输入:
python /home/pipi/slowfast/tools/run_net.py --cfg /home/pipi/slowfast/demo/AVA/SLOWFAST_32x2_R101_50_50.yaml
报错显示:
self.class_names, _, _ = get_class_names(class_names_path, None, None)
TypeError: cannot unpack non-iterable NoneType object

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: TypeError: cannot unpack non-iterable NoneType object中的 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 对象???)

  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料中的错误信息和代码示例,可以看出报错的原因是在运行slowfast时,执行了一行代码"model(G)",但出现了TypeError。根据参考资料中的修改后的代码,可以看出解决方法是将"user_embedding, item_embedding = model(G)"这一行代码放在前面的for循环内部执行。

    在回答问题之前,需要知道哪个slowfast项目是指的。由于问题描述中没有提供具体的slowfast项目,我无法准确回答你输入的命令是什么以及运行之前需要做哪些准备工作。

    然而,根据错误信息和参考资料的代码示例,我可以给出解决TypeError报错的示例代码和一般解决方法:

    解决方法: 首先,根据报错信息"TypeError: cannot unpack non-iterable NoneType object"得知,该错误是由于尝试对非可迭代的NoneType对象进行解包导致的。因此,我们需要找到这行代码:"user_embedding, item_embedding = model(G)"并对其进行修改。

    错误示例代码:

    user_embedding, item_embedding = model(G)
    

    修改后的示例代码:

    for data in dataloader:
        user, item_p, item_n = data 
        user_embedding, item_embedding = model(G)
    

    将"user_embedding, item_embedding = model(G)"代码放在内部的for循环中,确保在每个迭代步骤中,先执行了对模型进行前向传播的操作,再解包用户和项目嵌入的数据。

    至于你所使用的具体slowfast项目,需要提供更多的信息以便我能够给出更准确的解答。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^