如何快速打印Tensorflow结果到TXT?
How to quickly print Tensorflow results to TXT?
我想知道如何通过 Tensorflow 有效地将 NN 权重因子保存到 TXT 文件。流动是我尝试使用 fp.write
将 Tensorflow 的结果保存到 TXT 的示例。但是,当我有 4 层 NN,每层有 1000 个隐藏单元时,需要超过 1 天的时间。
fp = open('NN_for_Dymola.txt', 'w')
#############################
fp.write("********** W1 **********\n")
fp.write("[")
for i in range(n_hidden_1):
fp.write("{"),
if i == n_hidden_1-1:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % sess.run(weights['h1'][j,i]) ),
else:
fp.write( '%1.10f,' % sess.run(weights['h1'][j,i]) ),
fp.write( '}' ),
else:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % sess.run(weights['h1'][j,i]) ),
else:
fp.write( '%1.10f,' % sess.run(weights['h1'][j,i]) ),
fp.write( '},' ),
fp.write( ']' )
fp.close()
非常感谢!
TL;DR: 开销来自对权重矩阵的每个 元素 调用一次 sess.run()
。您可以对每个矩阵调用一次,然后改为对 Numpy 数组进行操作。
我怀疑缓慢的根源是这个表达式,它是为权重矩阵的每个元素计算的:
sess.run(weights['h1'][j, i])
为什么这么慢?首先,TensorFlow 会构造一个新的切片算子来提取索引 [j, i]
处的元素,然后调用 运行 时间到 运行 提取该值的步骤。 TensorFlow 被设计为当您一次定义一个运算符并多次使用它时是高效的。
幸运的是,您不必以这种方式访问各个元素。您可以调用 sess.run(weights['h1'])
一次以获取包含所有权重的 Numpy 数组,然后写出其元素。例如,下面的代码应该快得多:
h1_val = sess.run(weights['h1'])
fp = open('NN_for_Dymola.txt', 'w')
#############################
fp.write("********** W1 **********\n")
fp.write("[")
for i in range(n_hidden_1):
fp.write("{"),
if i == n_hidden_1-1:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % h1_val[j,i] ),
else:
fp.write( '%1.10f,' % h1_val[j,i] ),
fp.write( '}' ),
else:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % h1_val[j,i] ),
else:
fp.write( '%1.10f,' % h1_val[j,i] ),
fp.write( '},' ),
fp.write( ']' )
fp.close()
您可以使用 numpy.savetxt()
获得更快的结果,但该方法对格式的控制较少。
我想知道如何通过 Tensorflow 有效地将 NN 权重因子保存到 TXT 文件。流动是我尝试使用 fp.write
将 Tensorflow 的结果保存到 TXT 的示例。但是,当我有 4 层 NN,每层有 1000 个隐藏单元时,需要超过 1 天的时间。
fp = open('NN_for_Dymola.txt', 'w')
#############################
fp.write("********** W1 **********\n")
fp.write("[")
for i in range(n_hidden_1):
fp.write("{"),
if i == n_hidden_1-1:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % sess.run(weights['h1'][j,i]) ),
else:
fp.write( '%1.10f,' % sess.run(weights['h1'][j,i]) ),
fp.write( '}' ),
else:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % sess.run(weights['h1'][j,i]) ),
else:
fp.write( '%1.10f,' % sess.run(weights['h1'][j,i]) ),
fp.write( '},' ),
fp.write( ']' )
fp.close()
非常感谢!
TL;DR: 开销来自对权重矩阵的每个 元素 调用一次 sess.run()
。您可以对每个矩阵调用一次,然后改为对 Numpy 数组进行操作。
我怀疑缓慢的根源是这个表达式,它是为权重矩阵的每个元素计算的:
sess.run(weights['h1'][j, i])
为什么这么慢?首先,TensorFlow 会构造一个新的切片算子来提取索引 [j, i]
处的元素,然后调用 运行 时间到 运行 提取该值的步骤。 TensorFlow 被设计为当您一次定义一个运算符并多次使用它时是高效的。
幸运的是,您不必以这种方式访问各个元素。您可以调用 sess.run(weights['h1'])
一次以获取包含所有权重的 Numpy 数组,然后写出其元素。例如,下面的代码应该快得多:
h1_val = sess.run(weights['h1'])
fp = open('NN_for_Dymola.txt', 'w')
#############################
fp.write("********** W1 **********\n")
fp.write("[")
for i in range(n_hidden_1):
fp.write("{"),
if i == n_hidden_1-1:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % h1_val[j,i] ),
else:
fp.write( '%1.10f,' % h1_val[j,i] ),
fp.write( '}' ),
else:
for j in range(n_input):
if j == n_input - 1:
fp.write( '%1.10f' % h1_val[j,i] ),
else:
fp.write( '%1.10f,' % h1_val[j,i] ),
fp.write( '},' ),
fp.write( ']' )
fp.close()
您可以使用 numpy.savetxt()
获得更快的结果,但该方法对格式的控制较少。