MULTI
MULTI数据集是用于手写数字识别的一个相当著名的数据集,简单入门,是不少人在ai图像识别领域的敲门砖。
FL
联邦学习是一种分布式的机器学习方法,它允许多个参与方共享和学习一个模型,而不需要将原始数据集集中在一个地方。在手写数字识别的场景下,可以将数据集分为多个部分,并分配给多个参与方进行训练。参与方本地训练模型后,可以将模型参数上传到中央服务器进行融合,以更新整体模型。
主要部分如下:
- 数据准备
- 参与方本地训练
- 参数上传
- 模型融合
- 分发模型
- 本地测试
- 迭代训练
运行
结合multi数据集和联邦学习,单独的案例具体代码github网址:
能看到文件都是7 years ago的,所以环境版本和现在差别很大。
socketIO-client 0.7.2,
Flask-SocketIO 4.3.1,
python-engineio 3.13.2,
python-socketio 4.6.0。
以上版本的库可以运行。
运行联邦学习服务端fl_server.py出现端口号127.0.0.1,点击跳转到网页,再运行mnlti_client.py即可看到数据变化。
坑
问题1
报错:RuntimeError: The Werkzeug web server is not designed to run in production. Pass allow_unsafe_werkze
解决方案:ocketio.run()
方法传递 allow_unsafe_werkzeug=True
参数
问题2
报错:"GET /socket.io/?EIO=3&transport=polling&t=1711810525318-0 HTTP/1.1" 400 -
解决方案:客户端文件导入的是socketIO_client库,推测和flask_socketio不兼容。
但这玩意似乎只支持到socketIO1.x协议,并且找到最新的版本也是19年的。
出处:flask 报错 GET /socket.io/?EIO=3&transport=polling&t=(跨域问题?)_flask socketio 跨域-CSDN博客
问题3
报错:cannot import name '_request_ctx_stack' from 'flask'
原因:Flask版本 2.3以上,剔除了_request_ctx_stack。
解决方案:降级Flask,到2.2以下正常工作。