背景
本人定义了模型后,须要自行定义训练形式。
这里文档给了办法,然而大部分还是须要本人看源码摸索。
- https://fate.readthedocs.io/en/latest/tutorial/pipeline/nn_tutorial/Homo-NN-Customize-Trainer/
https://fate.readthedocs.io/en/latest/tutorial/pipeline/nn_tutorial/Homo-NN-Trainer-Interfaces/
文档写的也有疏漏哈哈,最初我还是本人找到了,就是下面2个链接:我的做法
在federatedml.nn.homo.trainer
外面退出本人的trainer。
我本人间接复制了原先的FedAvgTrainer
的代码,而后改掉了train的代码成本人代码了。
有几个留神的点
Fateboard中打印loss:找
callback_loss
,参照FedAvgTrainer的代码加上就行,loss曾经在base类里实现了,你也参考call back loss的代码能够间接新写个指标。我碰到的坑是:必须
float
+cpu()
一下、或者用item()
取值才行,即使是我的torch版本是反对cuda的,不然报错。我的写法是self.callback(float(my_loss.cpu().detach()), idx)
,然而我打印了FedAvg的loss他自身是numpy类型的,然而我间接numpy()就不行。不晓得怎么回事。self.callback(my_loss.cpu().detach().numpy(), idx),不报错,然而Fateboard加载不进去
self.callback(my_loss, idx),报错,说cuda available是False,我真醉了FedAvgTrainer
中federation process
是与是否收敛convergence相干的,退出那段代码能有疾速完结训练的成果(达到收敛规范可立刻完结,跟early stopping差不多)。