2018/4/26

https://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.html

TensorFlow模型保存和提取方法 

https://blog.csdn.net/marsjhao/article/details/72829635  https://blog.csdn.net/sinat_32547403/article/details/74612536

https://www.tensorflow.org/api_docs/python/tf/train/Saver 中写的是

tf.train.Saver

类 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或一个列表传递

  • 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_listVariable的列表SaveableObject或者将名字映射到SaveableObject的字典如果None,默认为所有可保存对象的列表。
  • reshape:如果True允许从变量具有不同形状的检查点恢复参数。
  • sharded:如果True分解检查点,则每个设备一个。
  • max_to_keep:要保留的最近检查点的最大数量。默认为5。
  • keep_checkpoint_every_n_hours:多久保持一次检查点。默认为10,000小时。
  • name:字符串。添加操作时用作前缀的可选名称。
  • restore_sequentially:A Bool,如果为true,则会导致不同变量的恢复在每个设备中顺序发生。这可以在恢复非常大的模型时降低内存使用量。
  • saver_def:可选协议SaverDef,而不是运行构建器。这仅仅是想要重新建立一个专门的代码有用Saver的先前建立的对象Graph是有一个Saversaver_def原型应该是返回一个as_saver_def()的电话Saver说是为创建Graph
  • builderSaverBuilder如果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必须指定 要保存的变量listdict变量。否则,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)

写入MetaGraphDefsave_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_defSaverDef协议缓冲区。
  • 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:
  • sessSession用于恢复参数的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_suffixMetaGraphDef文件后缀默认为'meta'。
  • write_meta_graphBoolean指示是否写入元图文件。
  • write_stateBoolean表示是否写入 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)

将其转换SaverSaverDef协议缓冲区。

ARGS:
  • export_scope:可选string命名范围删除。
返回:

SaverDef协议缓冲器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值