所以,我使用以下代码将所有变量文件转储为纯文本:
for x in tf.all_variables():
log("saved variable '{}'.".format(x.name))
newname = x.name.replace("/",".")
current_file = os.path.join(var_outdir, newname)
file = open(current_file, 'w')
x.eval(session = CONFIG.model.tf_manager.sessions[0]).tofile(file, sep='t')
file.close()
从这些文件恢复模型最好的是什么?
编辑:
保存功能:
def SaveToPlaintext(self, variable_files: Union[str, List[str]]) -> None:
cwd = os.getcwd()
var_outdir = os.path.join(cwd,'variables/')
#print(cwd, var_outdir)
log("saving variable files to '{}'."
.format(var_outdir))
if not os.path.exists(var_outdir):
os.makedirs(var_outdir, 0o777)
for x in tf.all_variables():
print(tf.get_variable_scope())
log("saved variable '{}'.".format(x.name))
newname = x.name.replace("/",".")
current_file = os.path.join(var_outdir, newname)
file = open(current_file, 'w')
x.eval(session = self.sessions[0]).tofile(file, sep='t')
file.close()
恢复功能:
def restore_from_text(self, variables_dir, meta_file) -> None:
saver_graph = tf.train.import_meta_graph('{}'.format(meta_file))
for filename in os.listdir(variables_dir):
variable_name = filename.replace(".","/")
variable_files_txt = {}
file_location = os.path.join(variables_dir, filename)
variable_file = open(file_location, 'r')
variable = np.fromfile(variable_file, dtype=float, count=-1, sep='t')
#init = tf.constant(variable)
variable_name = filename.replace(":0","")
#v = tf.get_variable(variable_name, initializer=init)
variable_files_txt[variable_name] = variable
sess = self.sessions[0]
for var_name, var in variable_files_txt.items():
sess.run([var_name+"/Assign"], feed_dict={var_name+"/initial_value:0": var})
下面是一个示例,演示如何在创建变量后将自定义值分配给变量。
x = tf.Variable(2.)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(x)
现在你可以看到这个变量的值是2,现在改变它的值
sess.run("Variable/Assign", feed_dict={"Variable/initial_value:0": 3.})
sess.run(x)
现在此变量的值更改为 3。
回到问题,首先你需要重建图形和一个字典,它将变量名称映射到其值,如{"var1": [1, 2], "var2": [2, 3]}
,你可以从你保存的文本文件中获取这个字典。然后,当您拥有此字典时,请运行以下命令sess.run(["var1/Assign", "var2/Assign"], feed_dict={"var1/initial_value:0": [1, 2], "var2/initial_value:0": [2, 3]})