我一直在使用Tensorflow上的一些神经网络,我想要对神经网络的学习过程进行可视化。 为此,我打算将以下变量提取到text / JSON / csv:第一层之前的预激活结果,用于测试和训练的激活,偏差和权重值,每一层以及所有时间步骤。我正在寻找一个可推广的解决方案,以便在将可视化应用于未来网络时,我不必修改我的源代码(或至少不超过一行或两行)。理想情况下,我可以从另一个python程序运行一些函数来读取任何python / TF代码并提取上述变量。到目前为止,我考虑过以下解决方案: 1)使用tf.summary和filewriter保存为序列化协议缓冲区,然后找到一种从协议缓冲区开始的方法 - > JSON格式。不幸的是,这不符合法案,因为它要求我修改太多内部代码。 2)也许使用https://www.tensorflow.org/api_docs/python/tf/train/export_meta_graph 虽然我不确定如何实施,因为我的TF基础尚未完全实现 3)我也找到了这个解决方案:
W_val, b_val= sess.run([W, b])
np.savetxt("W1.csv", W_val, delimiter=",")
np.savetxt("b1.csv", b_val, delimiter=",")
但问题在于它只保存了权重和偏差的最终值,而我希望在训练的所有时间步都保存它们的值。
如果有人对如何解决这个问题或任何指导有任何建议,我将不胜感激。
非常感谢
答案 0 :(得分:0)
使用tf.Summaries
执行此操作可能是一个好主意。然后,您可以在Tesnorboard中将其全部可视化,就像一些教程和初始重新训练代码一样。
或者,您可以在sess.run()
调用中执行提取,以便在每个步骤(即每次运行调用)中获取您喜欢的任何张量。
我已经粘贴了一个关于从下面另一个问题中提取交叉熵的类似问题的回复:
当您进行会话运行调用(例如res = sess.run(...)
)时,您可以为您的交叉熵变量进行提取。
例如,我们假设你有一个复杂的sess.run()
调用,可以获得一些预测,但你也想要你的交叉熵,那么你可能有这样的代码:
feeds={x_data:x,y_data:y}
fetches=[y_result,cross_entropy]
res=sess.run(fetches=fetches, feed_dict=feeds) predictions=res[0]
#your first fetch parameter xent=res[1] #Your second fetch parameter.
跑步通话中的提取使您可以获取"图表中的张量。
您应该能够执行上述操作,而不是交叉熵,只需列出您想要的任何内容。我用它来获取我的摘要和中间准确度值。
答案 1 :(得分:0)
for step in range(num_train_steps):
_, weight_values, bias_values = sess.run([your_train_op, weight, bias])
# save weight_values and bias_values