Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
6d87f600
M
models
项目概览
PaddlePaddle
/
models
大约 1 年 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
6d87f600
编写于
2月 28, 2022
作者:
littletomatodonkey
提交者:
GitHub
2月 28, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix thres in Step1 (#5475)
* fix ste1 * fix in re-impl cv * Update 01_test_forward.py
上级
8b9fd465
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
20 addition
and
13 deletion
+20
-13
tutorials/article-implementation/ArticleReproduction_CV.md
tutorials/article-implementation/ArticleReproduction_CV.md
+1
-1
tutorials/mobilenetv3_prod/Step1-5/01_test_forward.py
tutorials/mobilenetv3_prod/Step1-5/01_test_forward.py
+11
-2
tutorials/mobilenetv3_prod/Step1-5/README.md
tutorials/mobilenetv3_prod/Step1-5/README.md
+4
-6
tutorials/mobilenetv3_prod/Step1-5/mobilenetv3_ref/presets.py
...rials/mobilenetv3_prod/Step1-5/mobilenetv3_ref/presets.py
+1
-1
tutorials/mobilenetv3_prod/Step1-5/result/log/forward_diff.log
...ials/mobilenetv3_prod/Step1-5/result/log/forward_diff.log
+3
-3
未找到文件。
tutorials/article-implementation/ArticleReproduction_CV.md
浏览文件 @
6d87f600
...
...
@@ -277,7 +277,7 @@ if __name__ == "__main__":
*
模型在前向对齐验证时,需要调用
`model.eval()`
方法,保证组网中的随机量被关闭,比如BatchNorm、Dropout等。
*
给定相同的输入数据,为保证可复现性,如果有随机数生成,固定相关的随机种子。
*
我们可以基于reprod logger 的比较结果判断对齐效果,一般误差在1e-
6
附近的话,可以认为前向没有问题。
*
我们可以基于reprod logger 的比较结果判断对齐效果,一般误差在1e-
5
附近的话,可以认为前向没有问题。
*
如果最终输出结果diff较大,可以使用二分的方法进行排查,比如说ResNet50,包含1个stem、4个res-stage、global avg-pooling以及最后的fc层,那么完成模型组网和权重转换之后,如果模型输出没有对齐,可以尝试输出中间某一个res-stage的tensor进行对比,如果相同,则向后进行排查;如果不同,则继续向前进行排查,以此类推,直到找到导致没有对齐的操作。
**【实战】**
...
...
tutorials/mobilenetv3_prod/Step1-5/01_test_forward.py
浏览文件 @
6d87f600
...
...
@@ -9,6 +9,10 @@ from mobilenetv3_ref.torchvision.models import mobilenet_v3_small as mv3_small_t
def
test_forward
():
device
=
"gpu"
# you can also set it as "cpu"
torch_device
=
torch
.
device
(
"cuda:0"
if
device
==
"gpu"
else
"cpu"
)
paddle
.
set_device
(
device
)
# load paddle model
paddle_model
=
mv3_small_paddle
()
paddle_model
.
eval
()
...
...
@@ -21,6 +25,8 @@ def test_forward():
torch_state_dict
=
torch
.
load
(
"./data/mobilenet_v3_small-047dcff4.pth"
)
torch_model
.
load_state_dict
(
torch_state_dict
)
torch_model
.
to
(
torch_device
)
# load data
inputs
=
np
.
load
(
"./data/fake_data.npy"
)
...
...
@@ -31,7 +37,9 @@ def test_forward():
reprod_logger
.
save
(
"./result/forward_paddle.npy"
)
# save the torch output
torch_out
=
torch_model
(
torch
.
tensor
(
inputs
,
dtype
=
torch
.
float32
))
torch_out
=
torch_model
(
torch
.
tensor
(
inputs
,
dtype
=
torch
.
float32
).
to
(
torch_device
))
reprod_logger
.
add
(
"logits"
,
torch_out
.
cpu
().
detach
().
numpy
())
reprod_logger
.
save
(
"./result/forward_ref.npy"
)
...
...
@@ -46,4 +54,5 @@ if __name__ == "__main__":
# compare result and produce log
diff_helper
.
compare_info
(
torch_info
,
paddle_info
)
diff_helper
.
report
(
path
=
"./result/log/forward_diff.log"
)
diff_helper
.
report
(
path
=
"./result/log/forward_diff.log"
,
diff_threshold
=
1e-5
)
tutorials/mobilenetv3_prod/Step1-5/README.md
浏览文件 @
6d87f600
...
...
@@ -157,14 +157,12 @@ python 01_test_forward.py
根据示例代码可以看到,我们将结果保存在
`result/log/forward_diff.log`
中,打开对应文件或者直接观察命令行输出,就会有下列结果:
```
bash
[
202
1/12/21 15:00:38
] root INFO: logits:
[
202
1/12/21 15:00:38] root INFO: mean diff: check passed: False, value: 2.308018565599923
e-06
[
202
1/12/21 15:00:38] root INFO: diff check fail
ed
[
202
2/02/28 05:31:40
] root INFO: logits:
[
202
2/02/28 05:31:40] root INFO: mean diff: check passed: True, value: 1.7629824924370041
e-06
[
202
2/02/28 05:31:40] root INFO: diff check pass
ed
```
这里我们发现在
`reprod_log`
默认的平均差异小于1e-6的标准下,当前前向对齐是不符合条件的,但是这是由于前向 op 计算导致的微小的差异。
一般说来前向误差在 1e-5 左右都是可以接受的,到这里我们就验证了网络的前向是对齐的,完成了第一个打卡点。
由于前向 op 计算导致的微小的差异。一般说来前向误差在 1e-5 左右的 diff 是可以接受的,到这里我们就验证了网络的前向是对齐的,完成了第一个打卡点。
<a
name=
"4.2"
></a>
### 4.2 数据加载对齐
...
...
tutorials/mobilenetv3_prod/Step1-5/mobilenetv3_ref/presets.py
浏览文件 @
6d87f600
from
torchvision.transforms
import
autoaugment
,
transforms
from
torchvision.transforms
import
transforms
class
ClassificationPresetTrain
:
...
...
tutorials/mobilenetv3_prod/Step1-5/result/log/forward_diff.log
浏览文件 @
6d87f600
[2022/0
1/03 16:50:19
] root INFO: logits:
[2022/0
1/03 16:50:19] root INFO: mean diff: check passed: False, value: 2.308018565599923
e-06
[2022/0
1/03 16:50:19] root INFO: diff check fail
ed
[2022/0
2/28 05:31:40
] root INFO: logits:
[2022/0
2/28 05:31:40] root INFO: mean diff: check passed: True, value: 1.7629824924370041
e-06
[2022/0
2/28 05:31:40] root INFO: diff check pass
ed
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录