Deeplearning知识蒸馏
merge
paddleslim.dist.merge(teacher_program, student_program, data_name_map, place, scope=fluid.global_scope(), name_prefix=‘teacher_’)
merge将teacher_program融合到student_program中。在融合的program中,可以为其中合适的teacher特征图和student特征图添加蒸馏损失函数,从而达到用teacher模型的暗知识(Dark Knowledge)指导student模型学习的目的。
参数:
• teacher_program (Program)-定义了teacher模型的 paddle program
• student_program (Program)-定义了student模型的 paddle program
• data_name_map (dict)-teacher输入接口名与student输入接口名的映射,其中dict的 key 为teacher的输入名,value 为student的输入名
• place (fluid.CPUPlace()|fluid.CUDAPlace(N))-该参数表示程序运行在何种设备上,这里的N为GPU对应的ID
• scope (Scope)-该参数表示程序使用的变量作用域,如果不指定将使用默认的全局作用域。默认值: fluid.global_scope()
• name_prefix (str)-merge操作将统一为teacher的 Variables 添加的名称前缀name_prefix。默认值:’teacher_‘
返回: 无
注解
data_name_map 是 teacher_var name到student_var name的映射 ,如果写反可能无法正确进行merge
使用示例:
import paddle.fluid as fluid
import paddleslim.dist as dist
student_program = fluid.Program()
with fluid.program_guard(student_program):
x = fluid.layers.data(name=‘x’, shape=[1, 28, 28])
conv = fluid.layers.conv2d(x, 32, 1)
out = fluid.layers.conv2d(conv, 64, 3, padding=1)
teacher_program = fluid.Program()
with fluid.program_guard(teacher_program):
y = fluid.layers.data(name=‘y’, shape=[1, 28, 28])
conv = fluid.layers.conv2d(y, 32, 1)
conv = fluid.layers.conv2d(conv, 32, 3, padding=1)
out = fluid.layers.conv2d(conv, 64, 3, padding=1)
data_name_map = {‘y’:‘x’}
USE_GPU = False
place = fluid.CUDAPlace(0) if USE_GPU else fluid.CPUPlace()
dist.merge(teacher_program, student_program,
data_name_map, place)
fsp_loss
paddleslim.dist.fsp_loss(teacher_var1_name, teacher_var2_name, student_var1_name, student_var2_name, program=fluid.default_main_program())
fsp_loss为program内的teacher var和student var添加fsp loss,出自论文 A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning
参数:
• teacher_var1_name (str): teacher_var1的名称. 对应的variable是一个形为[batch_size, x_channel, height, width]的4-D特征图Tensor,数据类型为float32或float64
• teacher_var2_name (str): teacher_var2的名称. 对应的variable是一个形为[batch_size, y_channel, height, width]的4-D特征图Tensor,数据类型为float32或float64。只有y_channel可以与teacher_var1的x_channel不同,其他维度必须与teacher_var1相同
• student_var1_name (str): student_var1的名称. 对应的variable需与teacher_var1尺寸保持一致,是一个形为[batch_size, x_channel, height, width]的4-D特征图Tensor,数据类型为float32或float64
• student_var2_name (str): student_var2的名称. 对应的variable需与teacher_var2尺寸保持一致,是一个形为[batch_size, y_channel, height, width]的4-D特征图Tensor,数据类型为float32或float64。只有y_channel可以与student_var1的x_channel不同,其他维度必须与student_var1相同
• program (Program): 用于蒸馏训练的fluid program。默认值: fluid.default_main_program()
返回: 由teacher_var1, teacher_var2, student_var1, student_var2组合得到的fsp_loss
使用示例:
l2_loss
paddleslim.dist.l2_loss(teacher_var_name, student_var_name, program=fluid.default_main_program())[]
: l2_loss为program内的teacher var和student var添加l2 loss
参数:
• teacher_var_name (str): teacher_var的名称.
• student_var_name (str): student_var的名称.
• program (Program): 用于蒸馏训练的fluid program。默认值: fluid.default_main_program()
返回: 由teacher_var, student_var组合得到的l2_loss
使用示例:
soft_label_loss
paddleslim.dist.soft_label_loss(teacher_var_name, student_var_name, program=fluid.default_main_program(), teacher_temperature=1., student_temperature=1.)[]
soft_label_loss为program内的teacher var和student var添加soft label loss,出自论文 Distilling the Knowledge in a Neural Network
参数:
• teacher_var_name (str): teacher_var的名称.
• student_var_name (str): student_var的名称.
• program (Program): 用于蒸馏训练的fluid program。默认值: fluid.default_main_program()
• teacher_temperature (float): 对teacher_var进行soft操作的温度值,温度值越大得到的特征图越平滑
• student_temperature (float): 对student_var进行soft操作的温度值,温度值越大得到的特征图越平滑
返回: 由teacher_var, student_var组合得到的soft_label_loss
使用示例:
loss
paddleslim.dist.loss(loss_func, program=fluid.default_main_program(), **kwargs) []
: loss函数支持对任意多对teacher_var和student_var使用自定义损失函数
参数:
loss_func( python function): 自定义的损失函数,输入为teacher var和student var,输出为自定义的loss
• program (Program): 用于蒸馏训练的fluid program。默认值: fluid.default_main_program()
• **kwargs : loss_func输入名与对应variable名称
返回 :自定义的损失函数loss
使用示例:
注解
在添加蒸馏loss时会引入新的variable,需要注意新引入的variable不要与student variables命名冲突。这里建议两种用法(两种方法任选其一即可):

  1. 建议与student_program使用同一个命名空间,以避免一些未指定名称的variables(例如tmp_0, tmp_1…)多次定义为同一名称出现命名冲突
  2. 建议在添加蒸馏loss时指定一个命名空间前缀

Deeplearning知识蒸馏相关推荐

  1. 知识蒸馏(Knowledge Distillation)详细深入透彻理解重点

    知识蒸馏是一种模型压缩方法,是一种基于"教师-学生网络思想"的训练方法,由于其简单,有效,在工业界被广泛应用.这一技术的理论来自于2015年Hinton发表的一篇神作: 论文链接 ...

  2. 杂谈 | 当前知识蒸馏与迁移学习有哪些可用的开源工具?

    所有参与投票的 CSDN 用户都参加抽奖活动 群内公布奖项,还有更多福利赠送 作者&编辑 | 言有三 来源 | 有三AI(ID:yanyousan_ai) [导读]知识蒸馏与迁移学习不仅仅属于 ...

  3. 收藏 | 一文带你总览知识蒸馏,详解经典论文

    「免费学习 60+ 节公开课:投票页面,点击讲师头像」 作者:凉爽的安迪 来源 | 深度传送门(ID:deep_deliver) [导读]这是一篇关于[知识蒸馏]简述的文章,目的是想对自己对于知识蒸馏 ...

  4. 关于知识蒸馏,这三篇论文详解不可错过

    作者 | 孟让 转载自知乎 导语:继<从Hinton开山之作开始,谈知识蒸馏的最新进展>之后,作者对知识蒸馏相关重要进行了更加全面的总结.在上一篇文章中主要介绍了attention tra ...

  5. 微软亚研院提出用于语义分割的结构化知识蒸馏 | CVPR 2019

    作者 | CV君 来源 | 我爱计算机视觉 今天跟大家分享一篇关于语义分割的论文,刚刚上传到arXiv的CVPR 2019接收论文<Structured Knowledge Distillati ...

  6. 集成、知识蒸馏和自蒸馏有区别?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨梦佳 来源丨智源社区 编辑丨极市平台 集成(Ensemble, ...

  7. 知识蒸馏在推荐系统的应用

    点击上方,选择星标或置顶,每天给你送干货! 作者 | 张俊林 本文转载自知乎 https://zhuanlan.zhihu.com/p/143155437 随着深度学习的快速发展,优秀的模型层出不穷, ...

  8. 知识蒸馏:如何用一个神经网络训练另一个神经网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如果你曾经用神经网络来解决一个复杂的问题,你就会知道它们的尺寸可能 ...

  9. 知识蒸馏综述:蒸馏机制

    作者丨pprp 来源丨GiantPandaCV 编辑丨极市平台 导读 这一篇介绍各个算法的蒸馏机制,根据教师网络是否和学生网络一起更新,可以分为离线蒸馏,在线蒸馏和自蒸馏. 感性上理解三种蒸馏方式: ...

最新文章

  1. MonoCon:使用辅助学习的单目3D目标检测框架(AAAI 2022)
  2. amd黑苹果万能显卡驱动_黑苹果系统安装之声卡驱动
  3. PostgreSQL中的大容量空间探索时间序列数据存储
  4. OpenCVSharp::FindContours 错误:“total()==0||data!=NULL“
  5. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
  6. 网络编程应用:基于TCP协议【实现文件上传】--练习
  7. sklearn数据预处理
  8. Thanks, TuSimple!
  9. 为您的软件系统设计选择最佳的工具
  10. Appointment over SMS on Windows Mobile
  11. Micrium/UCOS官网账号密码重新改问题
  12. 阿里云上Kubernetes集群联邦
  13. jquery on()方法和bind()方法的区别
  14. python selenium 关闭窗口_Selenium快速上手实战 | 上篇
  15. (转)用纸笔解释比特币挖矿算法原理
  16. MATLAB学习与使用:矩阵的运算
  17. 关于STM8L系列编程
  18. 万恶淫为首,你想知道的真相!
  19. 云计算虚拟化特点和了解
  20. Go实现md5加密方法

热门文章

  1. 2022-2028年中国手机支付市场投资分析及前景预测报告
  2. Pandas 使用入门
  3. python重难点之装饰器详解
  4. 一篇文章告诉你标准化和归一化的区别?
  5. PyTorch代码调试利器: 自动print每行代码的Tensor信息
  6. RabbitMQ超详细安装教程(Linux)
  7. Cache Memory技术示例
  8. ALD和CVD晶体管薄膜技术
  9. 推理芯片的性能建立在优化的存储子系统设计上
  10. 2021年大数据ELK(四):Lucene的美文搜索案例