Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Pytorch Widedeep
提交
b28426ca
P
Pytorch Widedeep
项目概览
Greenplum
/
Pytorch Widedeep
大约 1 年 前同步成功
通知
9
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Pytorch Widedeep
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b28426ca
编写于
7月 07, 2023
作者:
J
Javier
提交者:
GitHub
7月 07, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #176 from LuoXueling/master
Fix: EarlyStopping does not store and restore the model #175
上级
30e8033e
46e68b6b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
5 deletion
+33
-5
pytorch_widedeep/callbacks.py
pytorch_widedeep/callbacks.py
+6
-5
tests/test_model_functioning/test_callbacks.py
tests/test_model_functioning/test_callbacks.py
+27
-0
未找到文件。
pytorch_widedeep/callbacks.py
浏览文件 @
b28426ca
...
...
@@ -6,6 +6,7 @@ CREDIT TO THE TORCHSAMPLE AND KERAS TEAMS
import
os
import
datetime
import
warnings
import
copy
import
numpy
as
np
import
torch
...
...
@@ -657,20 +658,20 @@ class EarlyStopping(Callback):
self
.
best
=
current
self
.
wait
=
0
if
self
.
restore_best_weights
:
self
.
state_dict
=
self
.
model
.
state_dict
(
)
self
.
state_dict
=
copy
.
deepcopy
(
self
.
model
.
state_dict
()
)
else
:
self
.
wait
+=
1
if
self
.
wait
>=
self
.
patience
:
self
.
stopped_epoch
=
epoch
self
.
trainer
.
early_stop
=
True
if
self
.
restore_best_weights
:
if
self
.
verbose
>
0
:
print
(
"Restoring model weights from the end of the best epoch"
)
self
.
model
.
load_state_dict
(
self
.
state_dict
)
def
on_train_end
(
self
,
logs
:
Optional
[
Dict
]
=
None
):
if
self
.
stopped_epoch
>
0
and
self
.
verbose
>
0
:
print
(
"Epoch %05d: early stopping"
%
(
self
.
stopped_epoch
+
1
))
if
self
.
restore_best_weights
and
self
.
state_dict
is
not
None
:
if
self
.
verbose
>
0
:
print
(
"Restoring model weights from the end of the best epoch"
)
self
.
model
.
load_state_dict
(
self
.
state_dict
)
def
get_monitor_value
(
self
,
logs
):
monitor_value
=
logs
.
get
(
self
.
monitor
)
...
...
tests/test_model_functioning/test_callbacks.py
浏览文件 @
b28426ca
...
...
@@ -479,3 +479,30 @@ def test_early_stopping_get_state():
shutil
.
rmtree
(
"tests/test_model_functioning/early_stopping/"
)
assert
no_trainer
and
no_model
def
test_early_stopping_restore_state
():
# min_delta is large, so the early stopping condition will never be met except for the first epoch.
early_stopping
=
EarlyStopping
(
restore_best_weights
=
True
,
min_delta
=
1000
,
patience
=
1000
)
trainer_tt
=
Trainer
(
model
,
objective
=
"regression"
,
callbacks
=
[
early_stopping
],
verbose
=
0
,
)
trainer_tt
.
fit
(
X_train
=
{
"X_wide"
:
X_wide
,
"X_tab"
:
X_tab
,
"target"
:
target
},
X_val
=
{
"X_wide"
:
X_wide_val
,
"X_tab"
:
X_tab_val
,
"target"
:
target_val
},
target
=
target
,
n_epochs
=
2
,
batch_size
=
16
,
)
assert
early_stopping
.
wait
>
0
# so early stopping is not triggered, but is over-fitting.
pred_val
=
trainer_tt
.
predict
(
X_test
=
{
"X_wide"
:
X_wide_val
,
"X_tab"
:
X_tab_val
})
restored_metric
=
trainer_tt
.
loss_fn
(
torch
.
tensor
(
pred_val
),
torch
.
tensor
(
target_val
)
).
item
()
assert
np
.
allclose
(
restored_metric
,
early_stopping
.
best
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录