Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleFL
提交
8a8cc243
P
PaddleFL
项目概览
PaddlePaddle
/
PaddleFL
通知
35
Star
5
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
6
列表
看板
标记
里程碑
合并请求
4
Wiki
3
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleFL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
6
Issue
6
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
3
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8a8cc243
编写于
5月 27, 2020
作者:
J
jingqinghe
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add trainer.save api
上级
5a6c0869
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
45 addition
and
0 deletion
+45
-0
python/paddle_fl/paddle_fl/core/trainer/fl_trainer.py
python/paddle_fl/paddle_fl/core/trainer/fl_trainer.py
+41
-0
python/paddle_fl/paddle_fl/examples/generate_job_from_program/fl_trainer.py
...addle_fl/examples/generate_job_from_program/fl_trainer.py
+4
-0
未找到文件。
python/paddle_fl/paddle_fl/core/trainer/fl_trainer.py
浏览文件 @
8a8cc243
...
...
@@ -11,8 +11,12 @@
# 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.
import
os
import
paddle.fluid
as
fluid
import
logging
from
paddle.fluid.executor
import
global_scope
import
pickle
from
paddle.fluid.io
import
is_belong_to_optimizer
from
paddle_fl.paddle_fl.core.scheduler.agent_master
import
FLWorkerAgent
import
numpy
import
hmac
...
...
@@ -83,6 +87,43 @@ class FLTrainer(object):
self
.
exe
,
main_program
=
infer_program
)
def
save
(
self
,
parameter_dir
,
model_path
):
base_name
=
os
.
path
.
basename
(
model_path
)
assert
base_name
!=
""
,
\
"The input model_path MUST be format of dirname/filename [dirname
\\
filename in Windows system], but received model_path is empty string."
dir_name
=
os
.
path
.
dirname
(
model_path
)
if
dir_name
and
not
os
.
path
.
exists
(
dir_name
):
os
.
makedirs
(
dir_name
)
def
get_tensor
(
var_name
):
t
=
global_scope
().
find_var
(
var_name
).
get_tensor
()
return
numpy
.
array
(
t
)
parameter_list
=
[]
with
open
(
parameter_dir
+
'/para_info'
,
'r'
)
as
fin
:
for
line
in
fin
:
current_para
=
line
[:
-
1
]
parameter_list
.
append
(
current_para
)
param_dict
=
{
p
:
get_tensor
(
p
)
for
p
in
parameter_list
}
with
open
(
model_path
+
".pdparams"
,
'wb'
)
as
f
:
pickle
.
dump
(
param_dict
,
f
,
protocol
=
2
)
optimizer_var_list
=
list
(
filter
(
is_belong_to_optimizer
,
self
.
_main_program
.
list_vars
()))
opt_dict
=
{
p
.
name
:
get_tensor
(
p
.
name
)
for
p
in
optimizer_var_list
}
with
open
(
model_path
+
".pdopt"
,
'wb'
)
as
f
:
pickle
.
dump
(
opt_dict
,
f
,
protocol
=
2
)
main_program
=
self
.
_main_program
.
clone
()
self
.
_main_program
.
desc
.
flush
()
main_program
.
desc
.
_set_version
()
fluid
.
core
.
save_op_compatible_info
(
self
.
_main_program
.
desc
)
with
open
(
model_path
+
".pdmodel"
,
"wb"
)
as
f
:
f
.
write
(
self
.
_main_program
.
desc
.
serialize_to_string
())
def
stop
(
self
):
# ask for termination with master endpoint
# currently not open sourced, will release the code later
...
...
python/paddle_fl/paddle_fl/examples/generate_job_from_program/fl_trainer.py
浏览文件 @
8a8cc243
...
...
@@ -79,3 +79,7 @@ while not trainer.stop():
train_test_feed
=
feeder
)
print
(
"Test with epoch %d, accuracy: %s"
%
(
epoch_id
,
acc_val
))
if
trainer_id
==
0
:
save_dir
=
(
output_folder
+
"/epoch_%d"
)
%
epoch_id
trainer
.
save
(
para_dir
,
save_dir
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录