当前位置: 首页 > news >正文

[TFF联邦学习]送给想要了解TFF的盆友

从9月初到现在9月22号,一直在努力学习谷歌的TFF联邦学习框架。小小总结一下这个框架的优缺点:

优点

  1. 模型构造的简洁性非常好,用简单的代码实现复杂的功能。
  2. 兼容TensorFlow代码好。服务器参数更新和客户端参数更新都可以用TensorFlow代码编写。
  3. 教程完善,官网的教程介绍的比较详细。

缺点

  1. 和优点第一条对应,代码过于简单,尤其是模型参数内部通信机制几乎不可见,导致我们学习的时候无法了解通信机制(这也许是我吹毛求疵了)
  2. 和优点第二条对应,模型只能通过TensorFlow来构建,无法兼容其他深度学习框架。并且TFF对于数据类型的要求非常严格!

这里也要不得不吐槽一下,由于TFF在构建联邦学习算子的时候非常强调数据类型,需要明确输入模型的权重类型和数据集的权重类型,所以我们必须要获取模型的权重类型。而要获取模型的权重类型,就必须按照TFF规定的方法来构建TensorFlow模型,

官方提供了两种构建TensorFlow模型方法: (方法1)直接设置模型的参数weight +
bias,然后通过参数手动构建网络。这种方式对于复杂的网络构建来说就是噩梦,相当于把网络全部手写一遍。

(方法2)先构建tf.keras.model,然后从这个模型构建。但是这个网络也不能是直接通过网络的class()实例化直接得到。而是必须通过tf.keras.Sequential()的方式来进行模型构建。然后通过tff.learning.from_keras_model()函数来构建联邦学习模型。
当然,经过测试,我们也可以通过class构建模型,然后在add到tf.keras.Sequential()里面,但是对class的call函数也有明确的要求:要求输入参数除了self外只能有一个input(这里的变量名称可以任意),出现多余的参数会造成构建错误。

  1. 缺点3,TFF与TensorFlow的版本高度绑定,如果版本不兼容就无法运行。然而,官方github上并不能找到明确的版本对应。能找到的版本对应都来自于csdn,但是都是几年前的老版本,没有新版本。严重怀疑官方删掉了版本对应表格,如果有小伙伴找到了请在评论区指出来。
  2. 缺点4,TFF框架目前都是试验阶段,也就是只能在本地进行联邦学习,所以如果你想要工程实现,建议还是考虑微众银行FATE的框架,或者干脆自己写一个简单的框架把。

就说这么多,大家考虑清楚自己的模型输入能不能转换成[x,y]的固定格式,如果是简单的图像分类模型,倒是可以一试,有多模态数据输入的模型就不建议考虑了。

心累,忙活了半个月发现我的模型搞不了。

相关文章:

  • 【面试题】Zookeeper
  • protocol buffers(protobuf)安装教程
  • vue 生命周期函数、组件数据共享
  • XxlJob快速开发
  • JS面向对象
  • Netty-预言
  • SDN实验(四)——Learning Switch自学习交换机
  • 基于帧同步的游戏框架说明
  • FFmpeg入门详解之35:FFplay播放器
  • 49、NeRFReN: Neural Radiance Fields with Reflections
  • uniapp省市区三级联动选择 - 纯本地json文件数据驱动 - openDB省市区opendb-city-china - 无需云端服务空间支持
  • 对话腾讯陈仁健:聊一聊腾讯PAG动效解决方案的生产能力与开源情况
  • sprboot
  • 【跨境电商】用WhatsApp群发拯救购物车弃购问题
  • Android的混淆使用方式
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • bearychat的java client
  • iOS 系统授权开发
  • Javascript 原型链
  • Java教程_软件开发基础
  • Java新版本的开发已正式进入轨道,版本号18.3
  • markdown编辑器简评
  • mysql_config not found
  • React的组件模式
  • Vue.js-Day01
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 前端存储 - localStorage
  • 如何使用 JavaScript 解析 URL
  • 使用 Docker 部署 Spring Boot项目
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 项目实战-Api的解决方案
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​渐进式Web应用PWA的未来
  • (12)目标检测_SSD基于pytorch搭建代码
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Matlab)使用竞争神经网络实现数据聚类
  • (solr系列:一)使用tomcat部署solr服务
  • (八)c52学习之旅-中断实验
  • (备忘)Java Map 遍历
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (图)IntelliTrace Tools 跟踪云端程序
  • (转)winform之ListView
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core Swagger 过滤部分Api
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler