类 Saver
定义于tensorflow/python/training/saver.py
。
查看指南:导出和导入MetaGraph>将完整模型导出到MetaGraph,导出和导入MetaGraph,变量>保存和恢复变量
保存并恢复变量。
将Saver
类添加OPS保存和恢复变量和 检查站。它还提供了运行这些操作的简便方法。
检查点是以专有格式将变量名称映射到张量值的二进制文件。检查检查点内容的最好方法是使用a加载它Saver
。
保存者可以使用提供的计数器自动为检查点文件名编号。这可以让您在训练模型的同时在不同的步骤保留多个检查点。例如,您可以使用训练步骤编号为检查点文件名编号。为避免填满磁盘,储户自动管理检查点文件。例如,他们只能保留N个最近的文件,或者每N个小时的训练只保留一个检查点。
您通过将值传递给可选global_step
参数来为检查点文件名编号 save()
:
saver.save(sess, 'my-model', global_step=0) ==> filename: 'my-model-0'...saver.save(sess, 'my-model', global_step=1000) ==> filename: 'my-model-1000'
另外,Saver()
构造函数的可选参数可以控制磁盘上检查点文件的扩散:
max_to_keep
指示要保留的最近检查点文件的最大数量。当新文件被创建时,旧文件被删除。如果无或0,则保留所有检查点文件。默认为5(也就是保留5个最近的检查点文件。)
keep_checkpoint_every_n_hours
:除了保留最近的 max_to_keep
检查点文件之外,您可能希望每N个小时的训练都保留一个检查点文件。如果您想稍后分析长时间训练期间模型的进展情况,这可能很有用。例如,通过keep_checkpoint_every_n_hours=2
确保您每2小时的训练保留一个检查点文件。10,000小时的默认值有效地禁用该功能。
请注意,您仍然需要调用该save()
方法来保存模型。将这些参数传递给构造函数不会自动为您保存变量。
定期保存的培训计划如下所示:
...
# Create a saver.
saver = tf.train.Saver(...variables...)
# Launch the graph and train, saving the model every 1,000 steps.
sess = tf.Session()
for step in xrange(1000000):
sess.run(..training_op..)
if step % 1000 == 0:
# Append the step number to the checkpoint name:
saver.save(sess, 'my-model', global_step=step)
除检查点文件外,保存程序还会在磁盘上保留一个协议缓冲区,并附带最近的检查点列表。这用于管理已编号的检查点文件,并通过latest_checkpoint()
它可以轻松发现最近检查点的路径。该协议缓冲区存储在检查点文件旁边的名为“检查点”的文件中。
如果您创建了多个保存程序,则可以在调用中为协议缓冲区文件指定一个不同的文件名save()
。
属性
last_checkpoints
尚未删除的检查点文件名列表。
您可以将任何返回的值传递给restore()
。
返回:
检查点文件名列表,从最旧到最新排序。
方法
__init__
__init__( var_list=None, reshape=False, sharded=False, max_to_keep=5, keep_checkpoint_every_n_hours=10000.0, name=None, restore_sequentially=False, saver_def=None, builder=None, defer_build=False, allow_empty=False, write_version=tf.train.SaverDef.V2, pad_step_number=False, save_relative_paths=False, filename=None)
创建一个Saver
。
构造函数添加ops来保存和恢复变量。
var_list
指定将被保存和恢复的变量。它可以作为一个dict
或一个列表传递:
- A
dict
到变量的名称:键是将用于保存或恢复检查点文件中的变量的名称。 - 变量列表:变量将在检查点文件中使用它们的op名称进行键控。
例如:
v1 = tf.Variable(..., name='v1')
v2 = tf.Variable(..., name='v2')
# Pass the variables as a dict:
saver = tf.train.Saver({'v1': v1, 'v2': v2})
# Or pass them as a list.
saver = tf.train.Saver([v1, v2])
# Passing a list is equivalent to passing a dict with the variable op names
# as keys:
saver = tf.train.Saver({v.op.name: v for v in [v1, v2]})
可选reshape
参数if True
允许从变量具有不同形状但具有相同数量的元素和类型的保存文件恢复变量。如果您重新设计了变量并希望从旧检查点重新加载该变量,这非常有用。
可选sharded
参数if True
指示保护程序为每个设备分割检查点。
ARGS:
var_list
:Variable
/ 的列表SaveableObject
或者将名字映射到SaveableObject
s 的字典。如果None
,默认为所有可保存对象的列表。reshape
:如果True
允许从变量具有不同形状的检查点恢复参数。sharded
:如果True
分解检查点,则每个设备一个。max_to_keep
:要保留的最近检查点的最大数量。默认为5。keep_checkpoint_every_n_hours
:多久保持一次检查点。默认为10,000小时。name
:字符串。添加操作时用作前缀的可选名称。restore_sequentially
:ABool
,如果为true,则会导致不同变量的恢复在每个设备中顺序发生。这可以在恢复非常大的模型时降低内存使用量。saver_def
:可选协议SaverDef
,而不是运行构建器。这仅仅是想要重新建立一个专门的代码有用Saver
的先前建立的对象Graph
是有一个Saver
。该saver_def
原型应该是返回一个as_saver_def()
的电话Saver
说是为创建Graph
。builder
:SaverBuilder
如果saver_def
未提供a,则可选使用。默认为BulkSaverBuilder()
。defer_build
:如果True
推迟将保存和恢复操作添加到build()
呼叫。在这种情况下,build()
应在确定图形或使用保存程序之前调用。allow_empty
:如果False
(默认)在图中没有变量时引发错误。否则,无论如何要构建保护程序,并使其无法运行。write_version
:控制保存检查点时使用的格式。它也影响某些文件路径匹配逻辑。V2格式是推荐的选择:在需要的内存和恢复期间产生的延迟方面,它比V1优化得多。无论这个标志如何,Saver能够从V2和V1检查点恢复。pad_step_number
:如果为True,则将检查点文件路径中的全局步号填充为某个固定宽度(默认为8)。这是默认关闭的。save_relative_paths
:如果True
将写入检查点状态文件的相对路径。如果用户想要复制检查点目录并从复制的目录重新加载,则需要此操作。filename
:如果在图形构建时已知,则用于可变加载/保存的文件名。
举:
TypeError
:如果var_list
无效。ValueError
:如果任何键或值var_list
不唯一。RuntimeError
:如果激活执行已启用并且var_list
未指定要保存的变量列表。
热切的兼容性
当启用急切执行时,var_list
必须指定 要保存的变量list
或dict
变量。否则,a RuntimeError
会被提出。
as_saver_def
as_saver_def()
生成SaverDef
此保护程序的表示形式。
返回:
一个SaverDef
原型。
build
build()
export_meta_graph
export_meta_graph( filename=None, collection_list=None, as_text=False, export_scope=None, clear_devices=False, clear_extraneous_savers=False, strip_default_attrs=False)
写入MetaGraphDef
save_path /文件名。
ARGS:
filename
:可选的meta_graph文件名,包括路径。collection_list
:要收集的字符串键列表。as_text
:如果True
,将meta_graph写为ASCII原型。export_scope
:可选string
。命名范围删除。clear_devices
:是否清除设备字段中的Operation
或Tensor
导出期间。clear_extraneous_savers
:删除与此保护程序无关的所有与保存程序有关的信息(保存/恢复操作和SaverDefs)。strip_default_attrs
:布尔值。如果True
,将从NodeDefs中删除默认值属性。有关详细指南,请参阅 剥离默认值属性。
返回:
一个MetaGraphDef
原型。
from_proto
@staticmethod
from_proto(
saver_def,
import_scope=None
)
返回Saver
创建的对象saver_def
。
ARGS:
saver_def
:SaverDef
协议缓冲区。import_scope
:可选string
。命名使用范围。
返回:
一个Saver
从saver_def建。
recover_last_checkpoints
recover_last_checkpoints(checkpoint_paths)
崩溃后恢复内部保护程序状态。
此方法对于恢复“self._last_checkpoints”状态很有用。
针对检查站的检查点checkpoint_paths
。如果文件存在,则使用他们的mtime作为检查点时间戳。
ARGS:
checkpoint_paths
:检查点路径的列表。
restore
restore(
sess,
save_path
)
恢复先前保存的变量。
此方法运行构造函数添加的ops以恢复变量。它需要一个图表启动的会话。要恢复的变量不必被初始化,因为恢复本身就是一种初始化变量的方法。
该save_path
参数是典型地先前从返回的值 save()
呼叫,或将呼叫latest_checkpoint()
。
ARGS:
sess
:Session
用于恢复参数的A. 没有在渴望的模式。save_path
:先前保存参数的路径。
举:
ValueError
:如果save_path是None。
save
save( sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix='meta', write_meta_graph=True, write_state=True, strip_default_attrs=False)
保存变量。
此方法运行构造函数添加的用于保存变量的操作。它需要一个图表启动的会话。要保存的变量也必须已经初始化。
该方法返回新创建的检查点文件的路径前缀。这个字符串可以直接传递给一个调用restore()
。
ARGS:
sess
:用于保存变量的会话。save_path
:字符串。为检查点创建的文件名前缀。global_step
:如果提供全局步骤号码附加 save_path
到创建检查点文件名。可选参数可以是Tensor
一个Tensor
名称或一个整数。latest_filename
:协议缓冲区文件的可选名称,其中将包含最近检查点的列表。该文件保存在与检查点文件相同的目录中,由保存程序自动管理以跟踪最近的检查点。默认为'检查点'。meta_graph_suffix
:MetaGraphDef
文件后缀。默认为'meta'。write_meta_graph
:Boolean
指示是否写入元图文件。write_state
:Boolean
表示是否写入 CheckpointStateProto
。strip_default_attrs
:布尔值。如果True
,将从NodeDefs中删除默认值属性。有关详细指南,请参阅 剥离默认值属性。
返回:
字符串:用于检查点文件的路径前缀。如果保存者被分割,则该字符串以:' - ????? - of-nnnnn'结尾,其中'nnnnn'是创建的分片数量。如果保存程序为空,则返回None。
举:
TypeError
:如果sess
不是Session
。ValueError
:如果latest_filename
包含路径组件,或者如果它碰撞save_path
。RuntimeError
:如果保存和恢复操作未建立。
set_last_checkpoints
set_last_checkpoints(last_checkpoints)
DEPRECATED:使用set_last_checkpoints_with_time。
设置旧检查点文件名的列表。
ARGS:
last_checkpoints
:检查点文件名列表。
举:
AssertionError
:如果last_checkpoints不是一个列表。
set_last_checkpoints_with_time
set_last_checkpoints_with_time(last_checkpoints_with_time)
设置旧的检查点文件名和时间戳列表。
ARGS:
last_checkpoints_with_time
:检查点文件名和时间戳的元组列表。
举:
AssertionError
:如果last_checkpoints_with_time不是列表。
to_proto
to_proto(export_scope=None)
将其转换Saver
为SaverDef
协议缓冲区。
ARGS:
export_scope
:可选string
。命名范围删除。
返回:
甲SaverDef
协议缓冲器。