日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Deeplearning知识蒸馏

發(fā)布時(shí)間:2023/11/28 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Deeplearning知识蒸馏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Deeplearning知識(shí)蒸餾
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特征圖添加蒸餾損失函數(shù),從而達(dá)到用teacher模型的暗知識(shí)(Dark Knowledge)指導(dǎo)student模型學(xué)習(xí)的目的。
參數(shù):
? 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))-該參數(shù)表示程序運(yùn)行在何種設(shè)備上,這里的N為GPU對(duì)應(yīng)的ID
? scope (Scope)-該參數(shù)表示程序使用的變量作用域,如果不指定將使用默認(rèn)的全局作用域。默認(rèn)值: fluid.global_scope()
? name_prefix (str)-merge操作將統(tǒng)一為teacher的 Variables 添加的名稱前綴name_prefix。默認(rèn)值:’teacher_‘
返回: 無
注解
data_name_map 是 teacher_var name到student_var name的映射 ,如果寫反可能無法正確進(jìn)行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內(nèi)的teacher var和student var添加fsp loss,出自論文 A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning
參數(shù):
? teacher_var1_name (str): teacher_var1的名稱. 對(duì)應(yīng)的variable是一個(gè)形為[batch_size, x_channel, height, width]的4-D特征圖Tensor,數(shù)據(jù)類型為float32或float64
? teacher_var2_name (str): teacher_var2的名稱. 對(duì)應(yīng)的variable是一個(gè)形為[batch_size, y_channel, height, width]的4-D特征圖Tensor,數(shù)據(jù)類型為float32或float64。只有y_channel可以與teacher_var1的x_channel不同,其他維度必須與teacher_var1相同
? student_var1_name (str): student_var1的名稱. 對(duì)應(yīng)的variable需與teacher_var1尺寸保持一致,是一個(gè)形為[batch_size, x_channel, height, width]的4-D特征圖Tensor,數(shù)據(jù)類型為float32或float64
? student_var2_name (str): student_var2的名稱. 對(duì)應(yīng)的variable需與teacher_var2尺寸保持一致,是一個(gè)形為[batch_size, y_channel, height, width]的4-D特征圖Tensor,數(shù)據(jù)類型為float32或float64。只有y_channel可以與student_var1的x_channel不同,其他維度必須與student_var1相同
? program (Program): 用于蒸餾訓(xùn)練的fluid program。默認(rèn)值: 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內(nèi)的teacher var和student var添加l2 loss
參數(shù):
? teacher_var_name (str): teacher_var的名稱.
? student_var_name (str): student_var的名稱.
? program (Program): 用于蒸餾訓(xùn)練的fluid program。默認(rèn)值: 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內(nèi)的teacher var和student var添加soft label loss,出自論文 Distilling the Knowledge in a Neural Network
參數(shù):
? teacher_var_name (str): teacher_var的名稱.
? student_var_name (str): student_var的名稱.
? program (Program): 用于蒸餾訓(xùn)練的fluid program。默認(rèn)值: fluid.default_main_program()
? teacher_temperature (float): 對(duì)teacher_var進(jìn)行soft操作的溫度值,溫度值越大得到的特征圖越平滑
? student_temperature (float): 對(duì)student_var進(jìn)行soft操作的溫度值,溫度值越大得到的特征圖越平滑
返回: 由teacher_var, student_var組合得到的soft_label_loss
使用示例:
loss
paddleslim.dist.loss(loss_func, program=fluid.default_main_program(), **kwargs) []
: loss函數(shù)支持對(duì)任意多對(duì)teacher_var和student_var使用自定義損失函數(shù)
參數(shù):
? loss_func( python function): 自定義的損失函數(shù),輸入為teacher var和student var,輸出為自定義的loss
? program (Program): 用于蒸餾訓(xùn)練的fluid program。默認(rèn)值: fluid.default_main_program()
? **kwargs : loss_func輸入名與對(duì)應(yīng)variable名稱
返回 :自定義的損失函數(shù)loss
使用示例:
注解
在添加蒸餾loss時(shí)會(huì)引入新的variable,需要注意新引入的variable不要與student variables命名沖突。這里建議兩種用法(兩種方法任選其一即可):

  1. 建議與student_program使用同一個(gè)命名空間,以避免一些未指定名稱的variables(例如tmp_0, tmp_1…)多次定義為同一名稱出現(xiàn)命名沖突
  2. 建議在添加蒸餾loss時(shí)指定一個(gè)命名空間前綴

總結(jié)

以上是生活随笔為你收集整理的Deeplearning知识蒸馏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。