Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleFL
提交
67fa4a19
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看板
未验证
提交
67fa4a19
编写于
1月 15, 2020
作者:
D
Dong Daxiang
提交者:
GitHub
1月 15, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #34 from qjing666/dataset
fix dataset conflict issue in single machine simulation
上级
8bd6f3df
db514025
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
53 addition
and
46 deletion
+53
-46
paddle_fl/core/trainer/fl_trainer.py
paddle_fl/core/trainer/fl_trainer.py
+6
-6
paddle_fl/dataset/femnist.py
paddle_fl/dataset/femnist.py
+41
-34
paddle_fl/examples/femnist_demo/fl_master.py
paddle_fl/examples/femnist_demo/fl_master.py
+1
-1
paddle_fl/examples/femnist_demo/fl_trainer.py
paddle_fl/examples/femnist_demo/fl_trainer.py
+3
-3
paddle_fl/version.py
paddle_fl/version.py
+2
-2
未找到文件。
paddle_fl/core/trainer/fl_trainer.py
浏览文件 @
67fa4a19
...
...
@@ -123,13 +123,13 @@ class FedAvgTrainer(FLTrainer):
self
.
exe
.
run
(
self
.
_recv_program
)
epoch
=
0
for
i
in
range
(
num_epoch
):
print
(
epoch
)
for
data
in
reader
():
self
.
exe
.
run
(
self
.
_main_program
,
feed
=
feeder
.
feed
(
data
),
print
(
epoch
)
for
data
in
reader
():
self
.
exe
.
run
(
self
.
_main_program
,
feed
=
feeder
.
feed
(
data
),
fetch_list
=
fetch
)
self
.
cur_step
+=
1
epoch
+=
1
self
.
cur_step
+=
1
epoch
+=
1
self
.
_logger
.
debug
(
"begin to run send program"
)
self
.
exe
.
run
(
self
.
_send_program
)
def
run
(
self
,
feed
,
fetch
):
...
...
paddle_fl/dataset/femnist.py
浏览文件 @
67fa4a19
...
...
@@ -3,68 +3,75 @@ import os
import
json
import
tarfile
import
random
url
=
"https://paddlefl.bj.bcebos.com/leaf/"
target_path
=
"femnist_data"
tar_path
=
target_path
+
".tar.gz"
print
(
tar_path
)
def
download
(
url
):
def
download
(
url
,
tar_path
):
r
=
requests
.
get
(
url
)
with
open
(
tar_path
,
'wb'
)
as
f
:
f
.
write
(
r
.
content
)
def
extract
(
tar_path
):
def
extract
(
tar_path
,
target_path
):
tar
=
tarfile
.
open
(
tar_path
,
"r:gz"
)
file_names
=
tar
.
getnames
()
for
file_name
in
file_names
:
tar
.
extract
(
file_name
)
tar
.
extract
(
file_name
,
target_path
)
tar
.
close
()
def
train
(
trainer_id
,
inner_step
,
batch_size
,
count_by_step
):
if
not
os
.
path
.
exists
(
target_path
):
print
(
"Preparing data..."
)
if
not
os
.
path
.
exists
(
tar_path
):
download
(
url
+
tar_path
)
extract
(
tar_path
)
def
train_data
():
train_file
=
open
(
"./femnist_data/train/all_data_%d_niid_0_keep_0_train_9.json"
%
trainer_id
,
'r'
)
json_train
=
json
.
load
(
train_file
)
users
=
json_train
[
"users"
]
rand
=
random
.
randrange
(
0
,
len
(
users
))
# random choose a user from each trainer
cur_user
=
users
[
rand
]
print
(
'training using '
+
cur_user
)
target_path
=
"trainer%d_data"
%
trainer_id
data_path
=
target_path
+
"/femnist_data"
tar_path
=
data_path
+
".tar.gz"
if
not
os
.
path
.
exists
(
target_path
):
os
.
system
(
"mkdir trainer%d_data"
%
trainer_id
)
if
not
os
.
path
.
exists
(
data_path
):
print
(
"Preparing data..."
)
if
not
os
.
path
.
exists
(
tar_path
):
download
(
"https://paddlefl.bj.bcebos.com/leaf/femnist_data.tar.gz"
,
tar_path
)
extract
(
tar_path
,
target_path
)
def
train_data
():
train_file
=
open
(
"./trainer%d_data/femnist_data/train/all_data_%d_niid_0_keep_0_train_9.json"
%
(
trainer_id
,
trainer_id
),
'r'
)
json_train
=
json
.
load
(
train_file
)
users
=
json_train
[
"users"
]
rand
=
random
.
randrange
(
0
,
len
(
users
))
# random choose a user from each trainer
cur_user
=
users
[
rand
]
print
(
'training using '
+
cur_user
)
train_images
=
json_train
[
"user_data"
][
cur_user
][
'x'
]
train_labels
=
json_train
[
"user_data"
][
cur_user
][
'y'
]
if
count_by_step
:
for
i
in
x
range
(
inner_step
*
batch_size
):
for
i
in
range
(
inner_step
*
batch_size
):
yield
train_images
[
i
%
(
len
(
train_images
))],
train_labels
[
i
%
(
len
(
train_images
))]
else
:
for
i
in
x
range
(
len
(
train_images
)):
for
i
in
range
(
len
(
train_images
)):
yield
train_images
[
i
],
train_labels
[
i
]
train_file
.
close
()
train_file
.
close
()
return
train_data
return
train_data
def
test
(
trainer_id
,
inner_step
,
batch_size
,
count_by_step
):
if
not
os
.
path
.
exists
(
target_path
):
target_path
=
"trainer%d_data"
%
trainer_id
data_path
=
target_path
+
"/femnist_data"
tar_path
=
data_path
+
".tar.gz"
if
not
os
.
path
.
exists
(
target_path
):
os
.
system
(
"mkdir trainer%d_data"
%
trainer_id
)
if
not
os
.
path
.
exists
(
data_path
):
print
(
"Preparing data..."
)
if
not
os
.
path
.
exists
(
tar_path
):
download
(
url
+
tar_path
)
extract
(
tar_path
)
def
test_data
():
test_file
=
open
(
"./femnist_data/test/all_data_%d_niid_0_keep_0_test_9.json"
%
trainer_id
,
'r'
)
json_test
=
json
.
load
(
test_file
)
users
=
json_test
[
"users"
]
for
user
in
users
:
download
(
"https://paddlefl.bj.bcebos.com/leaf/femnist_data.tar.gz"
,
tar_path
)
extract
(
tar_path
,
target_path
)
def
test_data
():
test_file
=
open
(
"./trainer%d_data/femnist_data/test/all_data_%d_niid_0_keep_0_test_9.json"
%
(
trainer_id
,
trainer_id
)
,
'r'
)
json_test
=
json
.
load
(
test_file
)
users
=
json_test
[
"users"
]
for
user
in
users
:
test_images
=
json_test
[
'user_data'
][
user
][
'x'
]
test_labels
=
json_test
[
'user_data'
][
user
][
'y'
]
for
i
in
x
range
(
len
(
test_images
)):
for
i
in
range
(
len
(
test_images
)):
yield
test_images
[
i
],
test_labels
[
i
]
test_file
.
close
()
test_file
.
close
()
return
test_data
return
test_data
paddle_fl/examples/femnist_demo/fl_master.py
浏览文件 @
67fa4a19
...
...
@@ -25,7 +25,7 @@ model = Model()
model
.
cnn
()
job_generator
=
JobGenerator
()
optimizer
=
fluid
.
optimizer
.
SGD
(
learning_rate
=
0.1
)
optimizer
=
fluid
.
optimizer
.
Adam
(
learning_rate
=
0.1
)
job_generator
.
set_optimizer
(
optimizer
)
job_generator
.
set_losses
([
model
.
loss
])
job_generator
.
set_startup_program
(
model
.
startup_program
)
...
...
paddle_fl/examples/femnist_demo/fl_trainer.py
浏览文件 @
67fa4a19
...
...
@@ -66,7 +66,7 @@ while not trainer.stop():
acc
=
trainer
.
run
(
feeder
.
feed
(
data
),
fetch
=
[
"accuracy_0.tmp_0"
])
step
+=
1
count
+=
1
print
(
count
)
print
(
count
)
if
count
%
trainer
.
_step
==
0
:
break
# print("acc:%.3f" % (acc[0]))
...
...
@@ -81,5 +81,5 @@ while not trainer.stop():
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_inference_program
(
output_folder
)
save_dir
=
(
output_folder
+
"/epoch_%d"
)
%
epoch_id
trainer
.
save_inference_program
(
output_folder
)
paddle_fl/version.py
浏览文件 @
67fa4a19
...
...
@@ -12,5 +12,5 @@
# See the License for the specific language governing permissions and
# limitations under the License.
""" PaddleFL version string """
fl_version
=
"0.1.
5
"
module_proto_version
=
"0.1.
5
"
fl_version
=
"0.1.
6
"
module_proto_version
=
"0.1.
6
"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录