Tensorflow 保存SavedModel:ValueError:至少有两个变量具有相同的名称

Tensorflow 保存SavedModel:ValueError:至少有两个变量具有相同的名称,tensorflow,Tensorflow,我有一个保存SavedModel的函数 在培训期间,每隔N个时期会不时调用此函数,以将当前保存的模型替换为较新的模型 def save_saved模型(sess、快照目录): 示例=tf.get_集合(“示例”)[0] label=tf.get_集合(“label”)[0] softmax=tf.get_集合(“softmax”)[0] logits=tf.get_集合(“logits”)[0] savedmodel\u dir=快照\u dir+“/saved\u model” rmtree(

我有一个保存SavedModel的函数

在培训期间,每隔N个时期会不时调用此函数,以将当前保存的模型替换为较新的模型

def save_saved模型(sess、快照目录):
示例=tf.get_集合(“示例”)[0]
label=tf.get_集合(“label”)[0]
softmax=tf.get_集合(“softmax”)[0]
logits=tf.get_集合(“logits”)[0]
savedmodel\u dir=快照\u dir+“/saved\u model”
rmtree(savedmodel\u dir,ignore\u errors=True)
tf.saved\u model.simple\u save(
sess,
savedmodel_目录,
输入={“示例”:示例},
输出={“softmax”:softmax,“logits”:logits},
)
在我将tensorflow升级到1.12之前,脚本一直有效

现在,第一次调用此函数时,它就工作了,随后的调用会导致附加的stacktrace,抱怨有两个变量名为
batch\u normalization/beta/Adagrad

ValueError: At least two variables have the same name:batch_normalization/beta/Adagrad
第一个困惑是这不是真的。这就是我在调用simple_save()之前转储所有变量时看到的情况。

batch\u normalization/beta/Adagrad
batch\u normalization/beta/Adagrad\u 1
:这是正常的还是可疑的

让我困惑的是,我只是在保存模型。我不是在恢复模型。那么,在我第二次调用此函数之前,我的图是否已经损坏,或者保存模型是否会以某种方式修改会话

Pass your op to the equivalent parameter main_op instead.
Traceback (most recent call last):
  File "src/tictactoe/train.py", line 412, in <module>
    train(sess)
  File "src/tictactoe/train.py", line 312, in train
    write_snapshot(sess, saver, global_step_val, "champion")
  File "src/tictactoe/train.py", line 185, in write_snapshot
    save_savedmodel(sess, snapshot_dir)
  File "src/tictactoe/train.py", line 209, in save_savedmodel
    outputs={"softmax": softmax, "logits": logits},
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/simple_save.py", line 85, in simple_save
    clear_devices=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/util/deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/builder_impl.py", line 415, in add_meta_graph_and_variables
    saver = self._maybe_create_saver(saver)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/builder_impl.py", line 272, in _maybe_create_saver
    allow_empty=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1102, in __init__
    self.build()
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1114, in build
    self._build(self._filename, build_save=True, build_restore=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1151, in _build
    build_save=build_save, build_restore=build_restore)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 773, in _build_internal
    saveables = self._ValidateAndSliceInputs(names_to_saveables)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 673, in _ValidateAndSliceInputs
    names_to_saveables = BaseSaverBuilder.OpListToDict(names_to_saveables)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 572, in OpListToDict
    name)
ValueError: At least two variables have the same name: batch_normalization/beta/Adagrad
将op传递给等效参数main_op。
回溯(最近一次呼叫最后一次):
文件“src/tictactoe/train.py”,第412行,在
列车(sess)
列车中第312行的文件“src/tictactoe/train.py”
写入快照(sess、保存程序、全局步骤、冠军)
文件“src/tictactoe/train.py”,第185行,写入快照
保存\u保存的模型(sess、快照\u目录)
文件“src/tictactoe/train.py”,第209行,在save_savedmodel中
输出={“softmax”:softmax,“logits”:logits},
文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/saved_model/simple_save.py”,第85行,simple_save
清除(设备=真)
文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/util/deprecation.py”,第488行,在new_func中
返回函数(*args,**kwargs)
文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/saved_model/builder_impl.py”,第415行,在add_meta_graph_和_变量中
saver=self.\u可能\u创建\u saver(saver)
文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/saved_model/builder_impl.py”,第272行,在“创建”保存程序中
允许(空=真)
文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py”,第1102行,在__
self.build()
文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py”,第1114行,内部版本
self.\u build(self.\u文件名,build\u save=True,build\u restore=True)
文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py”,第1151行,内部版本
生成保存=生成保存,生成还原=生成还原)
文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py”,第773行,内部版本
saveables=self.\u验证DSLICEInputs(名称\u到\u saveables)
文件“/usr/local/lib/python3.5/dist packages/tensorflow/python/training/saver.py”,第673行,在_ValidateAndSliceInputs中
names_to_saveables=BaseSaverBuilder.OpListToDict(names_to_saveables)
文件“/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py”,第572行,在OpListToDict中
(姓名)
ValueError:至少有两个变量具有相同的名称:batch_normalization/beta/Adagrad
batch_normalization/beta/Adagrad/Initializer/Const
batch_normalization/beta/Adagrad
batch_normalization/beta/Adagrad/Assign
batch_normalization/beta/Adagrad/read
batch_normalization/beta/Adagrad/Initializer/Const_1
batch_normalization/beta/Adagrad_1
batch_normalization/beta/Adagrad/Assign_1
batch_normalization/beta/Adagrad/read_1
Pass your op to the equivalent parameter main_op instead.
Traceback (most recent call last):
  File "src/tictactoe/train.py", line 412, in <module>
    train(sess)
  File "src/tictactoe/train.py", line 312, in train
    write_snapshot(sess, saver, global_step_val, "champion")
  File "src/tictactoe/train.py", line 185, in write_snapshot
    save_savedmodel(sess, snapshot_dir)
  File "src/tictactoe/train.py", line 209, in save_savedmodel
    outputs={"softmax": softmax, "logits": logits},
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/simple_save.py", line 85, in simple_save
    clear_devices=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/util/deprecation.py", line 488, in new_func
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/builder_impl.py", line 415, in add_meta_graph_and_variables
    saver = self._maybe_create_saver(saver)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/saved_model/builder_impl.py", line 272, in _maybe_create_saver
    allow_empty=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1102, in __init__
    self.build()
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1114, in build
    self._build(self._filename, build_save=True, build_restore=True)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 1151, in _build
    build_save=build_save, build_restore=build_restore)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 773, in _build_internal
    saveables = self._ValidateAndSliceInputs(names_to_saveables)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 673, in _ValidateAndSliceInputs
    names_to_saveables = BaseSaverBuilder.OpListToDict(names_to_saveables)
  File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/training/saver.py", line 572, in OpListToDict
    name)
ValueError: At least two variables have the same name: batch_normalization/beta/Adagrad