从纯文本文件恢复张量流变量文件



所以,我使用以下代码将所有变量文件转储为纯文本:

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]})

最新更新