【FATE联邦学习】model not init, call init_model() function

news2024/10/6 18:22:00

太长不看版

在local_mode下,不要使用t.CustModel进行实例化,而是直接使用原本的类进行实例化。
如果你设置了trainer.local_mode(),那么trainer里面的model不可以是t.CustModel()的实例。

给几个example:
正确:

model = SANet()
trainer.set_model(model) # set model
optimizer = t.optim.Adam(model.parameters(), lr=0.01)
loss = BCEDiceLoss()
trainer.train(train_set=ds, optimizer=optimizer, loss=loss) 

错误,会报如题的错误:

model = t.nn.Sequential(
     t.nn.CustModel(module_name='sanet',class_name='SANet',args=None)    
)

trainer.set_model(model) # set model

optimizer = t.optim.Adam(model.parameters(), lr=0.01)
loss = BCEDiceLoss()
trainer.train(train_set=ds, optimizer=optimizer, loss=loss) 

debug历程,跟上述内容没什么关系,各位不用看

在这里插入图片描述
提示都让我init model了。但是具体在哪里init?而且为什么父类没有自行init model,还要我手动init?看了下文档竟然是copy?这不对劲吧。。又搜索了所有文档,都没有提到。
在这里插入图片描述
在这里插入图片描述
最后发现是自己实现trainer必须要需要手动实现train,还有一个server_aggregate_procedure
最后在自己的trainer里面加上了下面的示例代码,发现也没有作用

def server_aggregate_procedure(self, extra_data={}):
        aggregator = SecureAggregatorServer(communicate_match_suffix='fedprox')

        # the aggregation process is simple: every epoch the server aggregate model and loss once
        for i in range(self.epochs):
            aggregator.model_aggregation()
            merge_loss, _ = aggregator.loss_aggregation()           

最后在trainer_base类里面,发现了这样的文字:

 @property
    def model(self):
        if not hasattr(self, '_model'):
            raise AttributeError(
                'model variable is not initialized, remember to call'
                ' super(your_class, self).__init__()')
        if self._model is None:
            raise AttributeError(
                'model is not set, use set_model() function to set training model')

我的情况应该是第一个了,竟然说我没有调用super init?
我的trainer的初始化并没有具体写哪个,让他自动推了,莫非必须要显式写上才行吗:

class SATrainer(TrainerBase):
    def __init__(self,epoch,batch_size,workers):
        super().__init__()

        self.epoch=epoch
        self.batch_size=batch_size
        self.workers=workers

修改成可是修改了之后仍然无效


class SATrainer(TrainerBase):
    def __init__(self,epoch,batch_size,workers):
        super(SATrainer,self).__init__()

再找!那他这个任务self._model是有个setter的,是不是因为set model没有成功?也尝试了,set model是成功的。

实在是没有办法了,在github直接提issue了。https://github.com/FederatedAI/FATE/issues/4843

最后在debug的里面,找到不同的报错原因:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/root/anaconda3/envs/fate/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl
    return forward_call(*input, **kwargs)
  File "/root/anaconda3/envs/fate/lib/python3.9/site-packages/torch/nn/modules/container.py", line 204, in forward
    input = module(input)
  File "/root/anaconda3/envs/fate/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl
    return forward_call(*input, **kwargs)
  File "/root/anaconda3/envs/fate/lib/python3.9/site-packages/pipeline/component/nn/backend/torch/cust.py", line 59, in forward
    raise ValueError('model not init, call init_model() function')
ValueError: model not init, call init_model() function

看样子是torch cust.py出现了问题!其源码:

class CustModel(FateTorchLayer, nn.Module):

    def __init__(self, module_name, class_name, **kwargs):
        super(CustModel, self).__init__()
        assert isinstance(
            module_name, str), 'name must be a str, specify the module in the model_zoo'
        assert isinstance(
            class_name, str), 'class name must be a str, specify the class in the module'
        self.param_dict = {
            'module_name': module_name,
            'class_name': class_name,
            'param': kwargs}
        self._model = None

    def init_model(self):
        if self._model is None:
            self._model = self.get_pytorch_model()

    def forward(self, x):
        if self._model is None:
            raise ValueError('model not init, call init_model() function')
        return self._model(x)
		
		def get_pytorch_model(self, module_path=None):

        if module_path is None:
            return get_class(
                self.param_dict['module_name'],
                self.param_dict['class_name'],
                self.param_dict['param'],
                MODEL_PATH)
        else:
            return get_class(
                self.param_dict['module_name'],
                self.param_dict['class_name'],
                self.param_dict['param'],
                module_path)

于是我改写了代码,显式调用了init model

cust_model=t.nn.CustModel(module_name='sanet',class_name='SANet',args=None)    
cust_model.init_model()
model = t.nn.Sequential(
    cust_model
)

报错:

Exception has occurred: ModuleNotFoundError
No module named 'None'
  File "/root/Downloads/project_demo/homo_sanet_core.py", line 78, in <module>
    cust_model.init_model()
ModuleNotFoundError: No module named 'None'

所以本质出现这个报错的原因是没有成功加载自定义的模型!

然后直接修改源码打印param的dict,发现没有出现问题。

再次翻看CustModel的文档,发现他们在test local model的时候并没有使用t.CustModel进行测试,而是直接实例化的类,没有用hook!莫非就是这个问题?

修改后,成功!原来是这样,2天的工作时间没了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年美国大学生数学建模竞赛B题重塑马赛马拉的形象解题全过程文档及程序

2023年美国大学生数学建模竞赛 B题 重塑马赛马拉的形象 原题再现&#xff1a; 背景介绍   肯尼亚的野生动物保护区最初主要是为了保护野生动物和其他自然资源而设立的。肯尼亚议会通过了2013年《野生动物保护和管理法》&#xff0c; 以提供更公平的资源共享&#xff0c;以及…

重新定义新增长,从百果园看ESG如何可持续

当下&#xff0c;企业的增长亟待重新定义。 中国已基本告别人口红利时代&#xff0c;不少行业和企业当前陷入增长困境。原来以规模定义的增长很难实现&#xff0c;一些企业在日常运营中找不到方向和方式&#xff0c;因此需要重新定义“增长”。 最终&#xff0c;在环境恶化、…

计算机图形学-GAMES101-7

引言 场景中有很多的三角形&#xff0c;如果实现可见性和遮挡呢&#xff1f;  一个简单的想法是&#xff0c;从远到近画&#xff0c;近处的物体自然会覆盖掉远处的物体&#xff0c;这种画法也叫画家算法。  但是实际绘制中物体的顺序是不容易确定的&#xff0c;比如如下图绘制…

下载和安装appuploader

转载&#xff1a;下载和安装appuploader IOS开发工具官网地址 Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 最新版本已经优化了没支付688给apple的账号登录流程&#xff0c;无需再安装其他软件。…

DockerWeave容器跨机通信网络部署

Docker Weave网络部署 Weave在Docker主机之间实现Overlay网络&#xff0c;使用业界标准VXLAN封装&#xff0c;基于UDP传输&#xff0c;也可以加密传输。 Weave Net创建一个连接多个Docker主机的虚拟网络&#xff0c;类似于一个以太网交换机&#xff0c;所有的容器都连接到这上…

数组或结构体赋值时memcpy与直接赋值的效率比较

先上结论&#xff1a; 二者不一定谁快通常情况下&#xff0c;数组维度越大&#xff0c;使用memcpy效率更高数组维度越大&#xff0c;直接赋值耗时主体是循环耗时 Note&#xff1a; “等号赋值”被编译器翻译成一连串的MOV指令&#xff0c;而memcpy则是一个循环。“等号赋值”比…

05mysql---函数

目录 1:日期函数 2:字符函数 3:数值函数 4:流程函数 1:日期函数 select 函数(参数) 函数功能举例curdate()返回当前日期2023-05-17curtime()返回当前时间14:44:33now()返回当前日期和时间2023-05-17 14:44:33year(date)获取指定date的年份month(date)获取指定date的月份day…

【简介】限流

限流 为什么要限流限流算法单机限流计数器算法滑动窗口算法漏桶算法令牌桶算法 分布式限流配额算法 限流策略限流位置 为什么要限流 作为有追求的程序员&#xff0c;我们都希望自己的系统跑的飞快&#xff0c;但是速度再快&#xff0c;系统处理请求耗时也不可能为0&#xff0c…

线程池下载4K壁纸

学习记录 学习记录 一、目标 aHR0cHM6Ly9waWMubmV0Ymlhbi5jb20vDQo 拿到每张图片的href 和 标题&#xff0c;跳转到详情页进行图片下载地址的提取并请求实现图片本地下载 二、代码实现 """ CSDN: 抄代码抄错的小牛马 mailbox&#xff1a;yxhlhm2002163.com…

计算机毕业论文内容参考|基于java的房产营销系统的设计与实现

文章目录 导文摘要前言绪论课题背景课题内容相关技术与方法介绍技术分析技术设计技术实现总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于java的房产营销系统的设计与实现 摘要 当今社会,随着经济的快速发展和人们对生活品质的不断提高,房地产行业正在面临…

Java --- docker安装redis

目录 一、拉取redis容器镜像 二、新建目录 三、拷贝redis.conf文件模板进/app/redis目录 四、修改redis.conf文件 五、启动redis镜像服务 一、拉取redis容器镜像 docker pull redis:7.0.0 二、新建目录 mkdir -p /app/redis 三、拷贝redis.conf文件模板进/app/redis目录 cp …

Java面试(4)面向对象

文章目录 概念1. 面向对象和面向过程的区别2. 面向对象三大特征 类1. 接口和抽象类有什么共同点和区别&#xff1f;2. 深拷贝和浅拷贝区别了解吗&#xff1f;什么是引用拷贝&#xff1f;3. 内部类1. 内部类2. 内部类的优点3. 内部类有哪些应用场景4. 局部内部类和匿名内部类访问…

python 3.8 + tensorflow 2.4.0 + cuda11.0 的问题

版本匹配 &#x1f517;从源代码构建 | TensorFlow 报错&#xff1a;Could not load dynamic library ‘cupti64_110.dll’; dlerror: cupti64_110.dll not found 是因为我电脑中的 cuda 版本以前是 10&#xff0c;现在是 11.4 &#xff0c;所以需要安装对应版本的 cudatoolk…

基于粒子群算法的微网经济优化调度——附Matalb代码

目录 摘要&#xff1a; 代码主要内容&#xff1a; 研究背景&#xff1a; 微电网模型&#xff1a; 粒子群算法&#xff1a; 运行结果&#xff1a; Matlab代码分享&#xff1a; 摘要&#xff1a; 提出了一种经济与环保相协调的微电网优化调度模型&#xff0c;针对光伏电池…

SAP入门到放弃系列之需求管理的基本要素

需求管理目标&#xff1a; 一般而言&#xff0c;生产计划&#xff08;PP&#xff09;的总体目标&#xff0c;特别是需求管理的总体目标是通过减少以下内容来更好地为客户服务&#xff1a; 补货提前期存货成本 需求管理的要素&#xff1a; 需求管理工作的主要要素广义上可分…

2013蓝桥杯真题省赛翻硬币 C语言/C++

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

暴涨700w播放,星穹铁道恰饭频频登上B站爆款热榜!

B站作为现在年轻一代聚集的多元化社区&#xff0c;游戏内容则是社区内受众较为广泛的存在&#xff0c;而星铁作为面向年轻群体的回合制游戏&#xff0c;自然是赢得B站核心用户群体的青睐。 4月26日&#xff0c;暌违已久的手游《崩坏&#xff1a;星穹铁道》&#xff08;后文简称…

【Java】平时开发中遇到的问题你是否遇到过?

文章目录 前言一、六类典型空指针问题1.1包装类型的空指针问题1.2 级联调用的空指针问题1.3 Equals方法左边的空指针问题1.4 ConcurrentHashMap 这样的容器不支持 Key&#xff0c;Value 为 null。1.5 集合&#xff0c;数组直接获取元素1.6 对象直接获取属性 二、日期YYYY格式设…

Linux和UNIX的关系及区别(详解)

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中&#xff0c;UNIX 诞生于 20 世纪 60 年代末&#xff0c;Windows 诞生于 20 世纪 80 年代中期&#xff0c;Linux 诞生于 20 世纪 90 年代初&#xff0c;可以说 UNIX 是操作系统中的"老大哥&…

Fortinet FortiNAC RCE漏洞复现(CVE-2022-39952)

0x01 产品简介 FortiNAC(Network Access Control) 是Fortinet的一种零信任网络访问控制解决方案&#xff0c;可增强用户对企业网络上的物联网 (IoT) 设备的监控。NAC 是零信任网络访问安全模型的重要组成部分&#xff0c;在该模型中&#xff0c;IT 团队可以轻松了解正在访问网络…