Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
ml-mastery-zh
提交
b3552126
M
ml-mastery-zh
项目概览
OpenDocCN
/
ml-mastery-zh
10 个月 前同步成功
通知
2
Star
556
Fork
158
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
ml-mastery-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b3552126
编写于
8月 30, 2019
作者:
ElamDavies
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
格式校对,翻译校正
上级
78d14ab5
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
237 addition
and
238 deletion
+237
-238
docs/dl-keras/check-point-deep-learning-models-keras.md
docs/dl-keras/check-point-deep-learning-models-keras.md
+237
-238
未找到文件。
docs/dl-keras/check-point-deep-learning-models-keras.md
浏览文件 @
b3552126
...
...
@@ -2,11 +2,11 @@
> 原文: [https://machinelearningmastery.com/check-point-deep-learning-models-keras/](https://machinelearningmastery.com/check-point-deep-learning-models-keras/)
深度学习模型
可能需要数小时,数天甚至数周才能进行训练。
深度学习模型
在训练时可能需要花费数小时,数天甚至数周。
如果意外停止运行,则可能会丢失大量
工作。
如果意外停止运行,则可能会丢失大量
成果。
在这篇文章中,您将了解如何使用
Keras 库在 Python 训练期间检查您的深度学习模型。
在这篇文章中,您将了解如何使用
Python中的keras库在模型训练期间检查您的深度学习模型。
让我们开始吧。
...
...
@@ -15,30 +15,30 @@
![
How to Check-Point Deep Learning Models in Keras
](
img/299672cd2b9efa26d634b06c4df2e751.png
)
如何在 Keras 检查深度学习模型
照片由
[
saragoldsmith
](
https://www.flickr.com/photos/saragoldsmith/2353051153/
)
,保留一些权利。
照片由
[
saragoldsmith
](
https://www.flickr.com/photos/saragoldsmith/2353051153/
)
提供,并保留其所属权利。
## 检验点神经网络模型
[
应用程序检查点
](
https://en.wikipedia.org/wiki/Application_checkpointing
)
是一种容错技术,适用于长时间运行的进程。
这是一种在系统出现故障时采用系统状态快照的方法
。如果出现问题,并非全部丢失。检查点可以直接使用,或者用作新运行的起点,从中断处开始。
这是一种在系统出现故障时采用系统状态快照的方法
,如果出现问题,任务并非全部丢失,检查点可以直接使用,或者从中断处开始,用作程序重新运行的起点。
在训练深度学习模型时,检查点是模型的权重
。这些权重可用于按原样进行预测,或用作持续训练的基础。
在训练深度学习模型时,检查点是模型的权重
参数,这些权重可用于按原样进行预测,或用作持续训练的基础。
Keras 库通过回调 API 提供
[
检查点功能。
](
http://keras.io/callbacks/#modelcheckpoint
)
ModelCheckpoint 回调类允许您定义检查模型权重的位置,文件应如何命名以及在何种情况下创建模型的检查点。
API 允许您指定要监控的度量标准,例如训练或验证数据集的
丢失或准确性。您可以指定是否在最大化或最小化分数时寻求改进。最后,用于存储权重的文件名可以包含诸如迭代号或度量的变量。
API 允许您指定要监控的度量标准,例如训练或验证数据集的
损失或准确性,您可以指定是否在最大化或最小化分数时寻求改进,最后,用于存储权重的文件名可以包含诸如迭代数量或度量的变量。
然后,在模型上调用
fit()函数时,可以将 ModelCheckpoint 传递给训练过程。
然后,在模型上调用
`fit()`
函数时,可以将 ModelCheckpoint 传递给训练过程。
注意,您可能需要安装
[
h5py 库
](
http://www.h5py.org/
)
以输出 HDF5 格式的网络权重。
## 检查点神经网络模型改进
检查点的良好用途是每次在训练期间观察到
改进时输出模型权重。
检查点的良好用途是每次在训练期间观察到
性能提升时输出模型权重参数。
下面的例子为皮马印第安人糖尿病二元分类问题创建了一个小型神经网络。该示例假设 _pima-indians-diabetes.csv_ 文件位于您的工作目录中。
...
...
@@ -46,41 +46,41 @@ API 允许您指定要监控的度量标准,例如训练或验证数据集的
*
[
皮马印第安人糖尿病数据集
](
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv
)
该示例使用 33%的数据
进行验证。
该示例使用 33%的数据
作为验证集。
只有在验证数据集
(monitor ='val_acc'和 mode ='max')的分类准确性有所提高时,才会设置检验点以保存网络权重。权重存储在一个文件中,该文件包含文件名中的分数(权重改进 - {val_acc = .2f} .hdf5)。
只有在验证数据集
`(monitor ='val_acc'和 mode ='max')`
的分类准确性有所提高时,才会设置检验点以保存网络权重参数。权重参数存储在一个文件中,该.hdf5文件的文件名为当前精度值(格式化输出为:
`权重改进 - {val_acc = .2f} .hdf5`
)。
```
py
#
Checkpoint the weights when validation accuracy improves
#
当验证集的精度有所提高时,需要保存当前的权重参数
from
keras.models
import
Sequential
from
keras.layers
import
Dense
from
keras.callbacks
import
ModelCheckpoint
import
matplotlib.pyplot
as
plt
import
numpy
#
fix random seed for reproducibility
#
固定随机种子再现性
seed
=
7
numpy
.
random
.
seed
(
seed
)
#
load pima indians dataset
#
加载数据集
dataset
=
numpy
.
loadtxt
(
"pima-indians-diabetes.csv"
,
delimiter
=
","
)
#
split into input (X) and output (Y) variables
#
将数据集划分为输入变量X和输出变量Y
X
=
dataset
[:,
0
:
8
]
Y
=
dataset
[:,
8
]
#
create model
#
创建模型
model
=
Sequential
()
model
.
add
(
Dense
(
12
,
input_dim
=
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
1
,
kernel_initializer
=
'uniform'
,
activation
=
'sigmoid'
))
#
Compile model
#
编译模型
model
.
compile
(
loss
=
'binary_crossentropy'
,
optimizer
=
'adam'
,
metrics
=
[
'accuracy'
])
#
checkpoint
#
检查点
filepath
=
"weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5"
checkpoint
=
ModelCheckpoint
(
filepath
,
monitor
=
'val_acc'
,
verbose
=
1
,
save_best_only
=
True
,
mode
=
'max'
)
callbacks_list
=
[
checkpoint
]
#
Fit the model
#
拟合模型
model
.
fit
(
X
,
Y
,
validation_split
=
0.33
,
epochs
=
150
,
batch_size
=
10
,
callbacks
=
callbacks_list
,
verbose
=
0
)
```
运行该示例将生成以下输出(为简洁
起见,将其截断):
运行该示例将生成以下输出(为简洁
表示,只显示其一部分结果):
```
py
...
...
...
@@ -112,47 +112,47 @@ weights-improvement-77-0.78.hdf5
weights
-
improvement
-
99
-
0.78
.
hdf5
```
这是一个非常简单的检查点策略
。如果验证准确度在训练时期上下移动,则可能会创建大量不必要的检查点文件。然而,它将确保您拥有在运行期间发现的最佳模型的快照。
这是一个非常简单的检查点策略
,如果验证准确度在训练时期上下移动,则可能会创建大量不必要的检查点文件,然而,它将确保您发现模型运行期间的最佳快照。
## 仅限检查点最佳神经网络模型
更简单的检查点策略是
将模型权重保存到同一文件中,当且仅当验证准确度提高时。
更简单的检查点策略是
当且仅当验证准确度提高时将模型权重保存到同一文件中。
这可以使用上面相同的代码轻松完成,并将输出文件名更改为固定
(不包括分数或迭代信息)。
这可以使用上面相同的代码轻松完成,并将输出文件名更改为固定
的字符串(不包括分数或迭代信息)。
在这种情况下,只有当验证数据集上模型的分类精度提高到目前为止最佳时,模型权重才会写入文件
“weights.best.hdf5”。
在这种情况下,只有当验证数据集上模型的分类精度提高到目前为止最佳时,模型权重才会写入文件
`weights.best.hdf5`
.
```
py
#
Checkpoint the weights for best model on validation accuracy
#
当验证模型精度最高时,保存权重
from
keras.models
import
Sequential
from
keras.layers
import
Dense
from
keras.callbacks
import
ModelCheckpoint
import
matplotlib.pyplot
as
plt
import
numpy
#
fix random seed for reproducibility
#
固定随机种子再现性
seed
=
7
numpy
.
random
.
seed
(
seed
)
#
load pima indians dataset
#
加载数据集
dataset
=
numpy
.
loadtxt
(
"pima-indians-diabetes.csv"
,
delimiter
=
","
)
#
split into input (X) and output (Y) variables
#
将数据集划分为输入变量和输出变量
X
=
dataset
[:,
0
:
8
]
Y
=
dataset
[:,
8
]
#
create model
#
创建模型
model
=
Sequential
()
model
.
add
(
Dense
(
12
,
input_dim
=
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
1
,
kernel_initializer
=
'uniform'
,
activation
=
'sigmoid'
))
#
Compile model
#
编译模型
model
.
compile
(
loss
=
'binary_crossentropy'
,
optimizer
=
'adam'
,
metrics
=
[
'accuracy'
])
#
checkpoint
#
检查点
filepath
=
"weights.best.hdf5"
checkpoint
=
ModelCheckpoint
(
filepath
,
monitor
=
'val_acc'
,
verbose
=
1
,
save_best_only
=
True
,
mode
=
'max'
)
callbacks_list
=
[
checkpoint
]
#
Fit the model
#
拟合模型
model
.
fit
(
X
,
Y
,
validation_split
=
0.33
,
epochs
=
150
,
batch_size
=
10
,
callbacks
=
callbacks_list
,
verbose
=
0
)
```
运行此示例提供以下输出(为简洁
起见,将其截断):
运行此示例提供以下输出(为简洁
表示,只显示其一部分结果):
```
py
...
...
...
@@ -169,50 +169,49 @@ Epoch 00148: val_acc did not improve
Epoch
00149
:
val_acc
did
not
improve
```
您应该
在本地目录中看到权重文件。
您应该
可以在本地目录中看到权重文件。
```
py
weights
.
best
.
hdf5
```
这是
一个方便的检查点策略,在您的实验中始终使用。它将确保为运行保存最佳模型,以便您以后使用。它避免了您需要在训练时包含代码以手动跟踪和序列化最佳模型。
这是
在您的实验中能够始终使用的一个方便的检查点策略,。它将确保为运行保存最佳模型,以便您以后使用,它避免了您需要在训练时包含代码以手动跟踪和序列化最佳模型。
## 加载
检查指向神经网络模型
## 加载
一个检查点的神经网络模型
现在您已经了解了如何在训练期间检查您的深度学习模型,您
需要查看如何加载和使用检查点模型。
现在您已经了解了如何在训练期间检查您的深度学习模型,您
现在需要了解如何加载和使用检查点模型。
检查点仅包括模型权重
。它假设您了解网络结构。这也可以序列化为 JSON 或 YAML 格式的文件。
检查点仅包括模型权重
,假设您了解网络结构,这些模型权重也可以序列化为 JSON 或 YAML 格式的文件。
在下面的示例中,模型结构是已知的,最佳权重从上一个实验加载,存储在 weights.best.hdf5 文件的工作目录中。
然后使用该模型对整个数据集进行预测。
```
py
#
How to load and use weights from a checkpoint
#
怎样从一个检查点加载和使用权重参数
from
keras.models
import
Sequential
from
keras.layers
import
Dense
from
keras.callbacks
import
ModelCheckpoint
import
matplotlib.pyplot
as
plt
import
numpy
# fix random seed for reproducibility
seed
=
7
# 固定随机种子再现性
numpy
.
random
.
seed
(
seed
)
#
create model
#
创建模型
model
=
Sequential
()
model
.
add
(
Dense
(
12
,
input_dim
=
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
8
,
kernel_initializer
=
'uniform'
,
activation
=
'relu'
))
model
.
add
(
Dense
(
1
,
kernel_initializer
=
'uniform'
,
activation
=
'sigmoid'
))
#
load weights
#
加载权重参数
model
.
load_weights
(
"weights.best.hdf5"
)
#
Compile model (required to make predictions)
#
编译模型(需要做出预测)
model
.
compile
(
loss
=
'binary_crossentropy'
,
optimizer
=
'adam'
,
metrics
=
[
'accuracy'
])
print
(
"Created model and loaded weights from file"
)
#
load pima indians dataset
#
加载数据集
dataset
=
numpy
.
loadtxt
(
"pima-indians-diabetes.csv"
,
delimiter
=
","
)
#
split into input (X) and output (Y) variables
#
将数据集划分为输入变量和输出变量
X
=
dataset
[:,
0
:
8
]
Y
=
dataset
[:,
8
]
#
estimate accuracy on whole dataset using loaded weights
#
在整个数据集上使用加载的权重参数评估模型性能
scores
=
model
.
evaluate
(
X
,
Y
,
verbose
=
0
)
print
(
"%s: %.2f%%"
%
(
model
.
metrics_names
[
1
],
scores
[
1
]
*
100
))
```
...
...
@@ -226,13 +225,13 @@ acc: 77.73%
## 摘要
在这篇文章中,您已经
发现了深度学习模型在长时间训练中的重要性。
在这篇文章中,您已经
了解了检查点在深度学习模型中长时间训练中的重要性。
您学习了两个检查点策略,您可以在下一个深度学习项目中使用它们:
1.
检查点模型改进。
2.
Checkpoint 最佳型号。
2.
唯一的检查点最佳模型。
您还学习了如何加载检查点模型并进行预测。
您对深度学习模型或此帖的检查点有任何疑问吗?在评论中提出您的问题,我会尽力回答。
\ No newline at end of file
如果您对深度学习模型或此帖的检查点有任何疑问吗?在评论中提出您的问题,我会尽力回答。
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录