Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow:如何在每次迭代训练时提取/导出变量值?_Python_Machine Learning_Tensorflow_Computer Vision - Fatal编程技术网

Python Tensorflow:如何在每次迭代训练时提取/导出变量值?

Python Tensorflow:如何在每次迭代训练时提取/导出变量值?,python,machine-learning,tensorflow,computer-vision,Python,Machine Learning,Tensorflow,Computer Vision,我一直在玩Tensorflow上的一些神经网络,我想把神经网络的学习过程可视化。 为此,我打算将以下变量提取到text/JSON/csv中:第一层之前的预激活结果、测试和训练的激活、偏差和权重值、每一层和所有时间步骤。我正在寻找一个通用的解决方案,这样在将可视化应用于未来网络时,我就不必修改源代码(或者至少不超过一行或两行)。理想情况下,我可以从另一个python程序运行一些函数来读取任何python/TF代码并提取上述变量。到目前为止,我考虑了以下解决方案: 1) 使用tf.summary和f

我一直在玩Tensorflow上的一些神经网络,我想把神经网络的学习过程可视化。 为此,我打算将以下变量提取到text/JSON/csv中:第一层之前的预激活结果、测试和训练的激活、偏差和权重值、每一层和所有时间步骤。我正在寻找一个通用的解决方案,这样在将可视化应用于未来网络时,我就不必修改源代码(或者至少不超过一行或两行)。理想情况下,我可以从另一个python程序运行一些函数来读取任何python/TF代码并提取上述变量。到目前为止,我考虑了以下解决方案: 1) 使用tf.summary和filewriter另存为序列化协议缓冲区,然后找到从协议缓冲区-->JSON格式开始的方法。不幸的是,这不符合条例草案,因为它需要我修改太多的内部代码。 2) 也许用 尽管我不确定如何实施,但我的TF基础还不完全具备 3) 我还发现了这个解决方案:

W_val, b_val= sess.run([W, b])
np.savetxt("W1.csv", W_val, delimiter=",")
np.savetxt("b1.csv", b_val, delimiter=",")
但问题是,它只保存权重和偏差的最终值,而我希望在训练的所有时间段保存它们的值

如果有人对如何解决这个问题有任何建议或指导,我将不胜感激


非常感谢使用
tf。摘要
可能是个好主意。然后,您可以在Tesnorboard中将其全部可视化,就像一些教程和inception再培训代码一样。
或者,您可以在
sess.run()
调用中执行抓取,以在每个步骤(即每个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.
运行调用中的获取允许您从图形中“获取”张量


你应该能够做到以上几点,但不是交叉熵,而是你想要的任何东西的列表。我用它来获取我的总结和中间精度值。

嘿,JCooke,非常感谢你的帮助回答。所以我最终用fetch实现了它,yey!但我仍然有一个挥之不去的问题:在我的训练循环中,它只使用res=sess.run(fetches=fetches)工作。那么,使用res=sess.run(fetches=fetches,feed\u dict=feed)来代替上面给出的示例代码有什么区别呢?我猜x和y数据都被考虑到了,但是这个输出是否与res=sess.run(fetches=fetches)的输出相同?当然。因此,sess.run()接受大量参数,包括fetches和feed_dict。它们的调用与任何其他函数一样,即
sess.run(fetches=[fetches],feed_dict={feeds})
如果有占位符,可以使用feed_dict将数据推送到占位符中。如果您正在使用x,y数据进行运行调用,则无需单独进行调用来获取您的值,您只需一次调用即可!fetch数组将以res为单位给出一个数组,因此res[0]=第一个fetch值,res[1]=第二个,依此类推。这有用吗?如果需要,可以进一步澄清。这很有意义!非常感谢你。因此,我注意到我在TF教程中使用的示例代码在开始时有一个sess.run(TF.global_variables_initializer()),它将W和B权重声明为TF变量。我不想设置一个等于该项的变量,因为它不在训练循环中,所以只需要给我一个“时间片”的权重和偏差值(我猜它们初始化的值是什么)。因此,在这个特定的实例中,.run的使用方式是否与我们上面讨论的不同?请检查我是否正确理解了您的答案,因为我的训练循环中已经有一个.run:train\u step.run(feed\u dict={x:batch[0],y\u:batch[1]})我正在我的训练循环中插入另一个.run来提取值:current1,current2=sess.run([W,b])。我从你的评论中了解到,我可以将两者结合起来,可能类似这样:current1,current2=train_step.run(fetches=[W,b],feed_dict={x:batch[0],y:batch[1]})听起来是这样吗?是的,基本上就是这样。或者,您可以在一个变量中执行此操作,并通过fetch进行索引。有关sess.run()的完整使用说明。
for step in range(num_train_steps):
    _, weight_values, bias_values = sess.run([your_train_op, weight, bias])
    # save weight_values and bias_values