Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleHub
提交
8448e1bb
P
PaddleHub
项目概览
PaddlePaddle
/
PaddleHub
大约 1 年 前同步成功
通知
281
Star
12117
Fork
2091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
200
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleHub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
200
Issue
200
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8448e1bb
编写于
4月 09, 2019
作者:
W
wuzewu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add l2-sp regularizer
上级
1cc79ed0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
90 addition
and
0 deletion
+90
-0
paddlehub/finetune/regularizer.py
paddlehub/finetune/regularizer.py
+90
-0
未找到文件。
paddlehub/finetune/regularizer.py
0 → 100644
浏览文件 @
8448e1bb
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from
__future__
import
absolute_import
from
__future__
import
division
from
__future__
import
print_function
import
os
import
paddle.fluid
as
fluid
import
numpy
as
np
import
paddlehub
as
hub
class
L2SPDecayRegularizer
(
fluid
.
regularizer
.
WeightDecayRegularizer
):
def
__init__
(
self
,
regularization_coeff
=
0.0
):
assert
regularization_coeff
is
not
None
super
(
L2SPDecayRegularizer
,
self
).
__init__
()
self
.
_regularization_coeff
=
regularization_coeff
self
.
save_dir
=
os
.
path
.
join
(
hub
.
CACHE_HOME
,
"l2sp"
)
def
__call__
(
self
,
param
,
grad
,
block
):
assert
isinstance
(
param
,
fluid
.
framework
.
Parameter
)
assert
isinstance
(
block
,
fluid
.
framework
.
Block
)
decay
=
block
.
create_var
(
name
=
fluid
.
unique_name
.
generate
(
"l2sp_decay"
),
dtype
=
param
.
dtype
,
shape
=
param
.
shape
,
lod_level
=
param
.
lod_level
)
startpoint
=
block
.
create_var
(
name
=
fluid
.
unique_name
.
generate
(
"l2sp_startpoint"
),
dtype
=
param
.
dtype
,
shape
=
param
.
shape
,
lod_level
=
param
.
lod_level
)
# TODO:record the start point with a more effective way
# save startpoint
save_program
=
fluid
.
default_startup_program
()
file_path
=
os
.
path
.
join
(
self
.
save_dir
,
param
.
name
)
with
fluid
.
program_guard
(
save_program
):
save_block
=
save_program
.
global_block
()
save_var
=
save_block
.
create_var
(
name
=
param
.
name
,
shape
=
param
.
shape
,
dtype
=
param
.
dtype
,
type
=
param
.
type
,
lod_level
=
param
.
lod_level
,
persistable
=
True
)
save_block
.
append_op
(
type
=
'save'
,
inputs
=
{
'X'
:
[
save_var
]},
outputs
=
{},
attrs
=
{
'file_path'
:
file_path
})
# load startpoint from file
block
.
append_op
(
type
=
'load'
,
inputs
=
{},
outputs
=
{
'Out'
:
[
startpoint
]},
attrs
=
{
'file_path'
:
file_path
})
# Append Op to calculate decay
block
.
append_op
(
type
=
'elementwise_sub'
,
inputs
=
{
'X'
:
param
,
'Y'
:
startpoint
},
outputs
=
{
'Out'
:
decay
})
block
.
append_op
(
type
=
'scale'
,
inputs
=
{
"X"
:
decay
},
outputs
=
{
"Out"
:
decay
},
attrs
=
{
"scale"
:
self
.
_regularization_coeff
})
return
decay
def
__str__
(
self
):
return
"L2SPDecay, regularization_coeff=%f"
%
self
.
_regularization_coeff
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录