HuJiaQi0805 2024-04-16 09:35 采纳率: 16.7%
浏览 5
已结题

焦虑中! 一篇论文的代码复现 一个错误显示操作数不能广播 不知道如何解决

这篇文章的复现:Rethinking Federated Learning with Domain Shift: A Prototype View
错误指令如下

img

img

导儿说这周复现不了就完蛋了 😭😭

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-16 09:35
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试复现《Rethinking Federated Learning with Domain Shift: A Prototype View》这篇论文中的代码,并遇到了一个与NumPy广播(broadcasting)相关的错误。在Python中,广播是指NumPy自动处理不同形状数组的操作,使其能够在运算时兼容。然而,当两个数组的维度不匹配且无法通过添加前导零来使之匹配时,就会出现"operands could not be broadcast together with shapes (20,) "这样的错误。

    根据你提供的信息,这个错误出现在get_data_loaders函数中的一行代码上:

    using_list = self.DOMAINS_LIST if selected_domain_list == [] else selected_domain_list
    

    错误提示 (20,) 指的是某个数组的形状只有一个元素,可能是self.DOMAINS_LISTselected_domain_list其中之一。为了解决这个问题,我们需要确保这两个列表在进行条件判断之前具有相同的长度,或者至少可以通过广播得到相同长度。

    这里有一个可能的解决方案,检查selected_domain_list是否为空,如果不为空,则确保它的长度与self.DOMAINS_LIST相同。可以这样做:

    from typing import List
    
    # 假设DOMAINS_LIST是一个包含多个子列表的列表,每个子列表代表一个域的数据
    def get_data_loaders(self, selected_domain_list: List[str]) -> None:
        using_list = self.DOMAINS_LIST.copy()
        
        # 如果selected_domain_list不为空且其长度与DOMAINS_LIST不同,抛出异常
        if selected_domain_list and len(selected_domain_list) != len(using_list):
            raise ValueError("selected_domain_list length should match DOMAINS_LIST")
    
        nor_transform = self.Nor_TRANSFORM
        sin_chan_nor_transform = self.Singel_Channel_Nor_TRANSFORM
        train_dataset_list = []
        test_dataset_list = []
        dataloader_size = []
    
        Label_transform = transforms.TypeCast(mindspore.int32)
        test_label_transform = transforms.TypeCast(mindspore.int32)
    
        # ... 其他代码
    

    这段代码首先复制了self.DOMAINS_LIST,然后检查selected_domain_list是否已提供并且长度正确。如果提供了但长度不正确,它会抛出一个异常。这样可以确保在执行任何可能引发广播错误的操作之前,两个列表具有相同的长度。

    如果你的self.DOMAINS_LIST不是多级结构,而是一个简单的列表,那么只需要比较它们的长度即可。另外,确保你的输入数据是正确的,即selected_domain_list应该是一个包含20个元素的列表,或者为空。如果这不是问题所在,那么可能需要进一步分析其他相关代码部分以找到导致错误的确切原因。

    请将上述代码片段替换到你的get_data_loaders函数中,然后运行看看是否有改进。如果有任何进一步的问题或困惑,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月30日
  • 创建了问题 4月16日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题