为对抗性学习增加 tensorboard 的价值
adding value to tensorboard for adversarial learning
我是张量板的新手。我在使用过程中遇到了一些问题。
问题 1:
我正在编写一个对抗性学习模型。为了可视化模型的损失,我有以下损失,
actor loss
critic loss
对于this paper中提供的学习算法,
在一个(或 K)批次中,我必须同时为演员和评论家提供食物。然后我只需要向评论家提供价值。这次没有演员。我认为,为了在 tensorboard 中显示价值,我需要执行以下操作,
def model():
...
actor_loss = ...
tf.summary.scalar('actor', actor_loss)
...
critic_loss = ...
tf.summary.scalar('critic', critic_loss)
my_graph = tf.Graph()
with my_graph.as_default():
tf.reset_default_graph()
sess = tf.Session()
with sess.as_default():
model()
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter(address+ '/train',
sess.graph)
init = tf.global_variables_initializer()
sess.run(init)
现在给inner_loop(演员和评论家都参与)输入没有问题,我们通过以下得到结果,
a,b,c,d,summary = sess.run( [actor_train_step, critic_train_step, actor_loss, critic_loss, merged], feed_dict = feed_dict )
writer.add_summary(summary, batch)
但是当我们只想给评论家提供输入时,代码就变成了下面这样,
a,b,summary = sess.run( [critic_train_step, critic_loss, merged], feed_dict = feed_dict )
writer.add_summary(summary, batch)
但是由于 merged
对 actor_loss
有依赖性,所以不能 运行。另一方面,我不能只是将演员的价值提供给模型。如何解决这个问题?
问题 2
我不是通过张量运算来评估(计算分值)模型。实际上,我生成了输出并将输出提供给另一个脚本并从那里获得了分数值。因此,在每个 batch/epoch 之后,我都会评估我的模型并从脚本中获得分数值。如何将此值保存到张量板?
我无法在会话初始化之前将 tf.summary.merge_all()
操作形式化,因为我正在从外部脚本计算训练时的评估分数值。
Where should I put the tf.summary.merge_all()
operation?
现在如果我想将问题 1 和问题 2 合并到一个项目中,我需要做些什么吗?
注意:我是张量板的新手。所以如果能详细解释一下就更好了
问题 #1
如果你只想总结评论家的操作,你应该只运行评论家部分的摘要操作而不是使用tf.summary.merge_all()
例如:
def model():
...
actor_loss = ...
tf.summary.scalar('actor', actor_loss)
...
critic_loss = ...
summary_critic = tf.summary.scalar('critic', critic_loss)
a,b,summary = sess.run( [critic_train_step, critic_loss, summary_critic], feed_dict = feed_dict )
writer.add_summary(summary, batch)
问题#2
可视化您在 运行 外部脚本后获得的值。您可以使用 tf.convert_to_tensor()
、which is documented here 将这些值转换为张量。然后序列化该张量以在张量板上可视化它。
例如:
vals = output_from_outside_script()
vals_tensor = sess.run(tf.convert_to_tensor(vals))
tf.summary.scalar('evaluation', vals_tensor)
每个 tf.summary
操作都会创建一个 Summary
protobuf,它将您的张量序列化为一个事件文件。 Tensorflow 不是 运行 宁所有的摘要操作,而是提供 tf.summary.merger_all()
到 运行 图中的所有摘要操作。
我试过在你的情况下这样做。
外部脚本:
import numpy as np
def output_from_outside_script(var):
return np.sum(var)
对抗训练中的代码:
import tensorflow as tf
import numpy as np
from outside_evaluation import *
sess = tf.Session()
x = sess.run(tf.constant([[1,2,3,4]], dtype=tf.float32))
X = tf.placeholder(dtype=tf.float32, shape=[1, 4])
W = tf.Variable(tf.truncated_normal([4, 10], stddev=0.1))
sess.run(tf.global_variables_initializer())
val = tf.matmul(a=X, b=W, name='matmul')
tf.summary.scalar('matmul_mean', tf.reduce_mean(val))
y = sess.run(val, feed_dict={X: x})
print('y = ', y)
vals = output_from_outside_script(y)
print('vals = ', vals)
vals_tensor = tf.convert_to_tensor(vals, name='vals_tensor')
tf.summary.scalar('evaluation', vals_tensor)
writer = tf.summary.FileWriter(os.path.join('test_log'), sess.graph)
merged = tf.summary.merge_all()
summary = sess.run(merged, feed_dict={X: x})
writer.add_summary(summary)
writer.close()
输出:
('y = ', array([[-0.51137048, -0.16054343, -0.03827953, 0.1124011 , 0.09200752,
-0.22235785, 0.41357356, 1.04061067, -0.08877556, -0.86647421]],
('vals = ', -0.22920817)
张量板日志:
标量:
如有任何问题,请告诉我。
我是张量板的新手。我在使用过程中遇到了一些问题。
问题 1:
我正在编写一个对抗性学习模型。为了可视化模型的损失,我有以下损失,
actor loss
critic loss
对于this paper中提供的学习算法, 在一个(或 K)批次中,我必须同时为演员和评论家提供食物。然后我只需要向评论家提供价值。这次没有演员。我认为,为了在 tensorboard 中显示价值,我需要执行以下操作,
def model():
...
actor_loss = ...
tf.summary.scalar('actor', actor_loss)
...
critic_loss = ...
tf.summary.scalar('critic', critic_loss)
my_graph = tf.Graph()
with my_graph.as_default():
tf.reset_default_graph()
sess = tf.Session()
with sess.as_default():
model()
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter(address+ '/train',
sess.graph)
init = tf.global_variables_initializer()
sess.run(init)
现在给inner_loop(演员和评论家都参与)输入没有问题,我们通过以下得到结果,
a,b,c,d,summary = sess.run( [actor_train_step, critic_train_step, actor_loss, critic_loss, merged], feed_dict = feed_dict )
writer.add_summary(summary, batch)
但是当我们只想给评论家提供输入时,代码就变成了下面这样,
a,b,summary = sess.run( [critic_train_step, critic_loss, merged], feed_dict = feed_dict )
writer.add_summary(summary, batch)
但是由于 merged
对 actor_loss
有依赖性,所以不能 运行。另一方面,我不能只是将演员的价值提供给模型。如何解决这个问题?
问题 2
我不是通过张量运算来评估(计算分值)模型。实际上,我生成了输出并将输出提供给另一个脚本并从那里获得了分数值。因此,在每个 batch/epoch 之后,我都会评估我的模型并从脚本中获得分数值。如何将此值保存到张量板?
我无法在会话初始化之前将 tf.summary.merge_all()
操作形式化,因为我正在从外部脚本计算训练时的评估分数值。
Where should I put the
tf.summary.merge_all()
operation?
现在如果我想将问题 1 和问题 2 合并到一个项目中,我需要做些什么吗?
注意:我是张量板的新手。所以如果能详细解释一下就更好了
问题 #1
如果你只想总结评论家的操作,你应该只运行评论家部分的摘要操作而不是使用tf.summary.merge_all()
例如:
def model():
...
actor_loss = ...
tf.summary.scalar('actor', actor_loss)
...
critic_loss = ...
summary_critic = tf.summary.scalar('critic', critic_loss)
a,b,summary = sess.run( [critic_train_step, critic_loss, summary_critic], feed_dict = feed_dict )
writer.add_summary(summary, batch)
问题#2
可视化您在 运行 外部脚本后获得的值。您可以使用 tf.convert_to_tensor()
、which is documented here 将这些值转换为张量。然后序列化该张量以在张量板上可视化它。
例如:
vals = output_from_outside_script()
vals_tensor = sess.run(tf.convert_to_tensor(vals))
tf.summary.scalar('evaluation', vals_tensor)
每个 tf.summary
操作都会创建一个 Summary
protobuf,它将您的张量序列化为一个事件文件。 Tensorflow 不是 运行 宁所有的摘要操作,而是提供 tf.summary.merger_all()
到 运行 图中的所有摘要操作。
我试过在你的情况下这样做。
外部脚本:
import numpy as np
def output_from_outside_script(var):
return np.sum(var)
对抗训练中的代码:
import tensorflow as tf
import numpy as np
from outside_evaluation import *
sess = tf.Session()
x = sess.run(tf.constant([[1,2,3,4]], dtype=tf.float32))
X = tf.placeholder(dtype=tf.float32, shape=[1, 4])
W = tf.Variable(tf.truncated_normal([4, 10], stddev=0.1))
sess.run(tf.global_variables_initializer())
val = tf.matmul(a=X, b=W, name='matmul')
tf.summary.scalar('matmul_mean', tf.reduce_mean(val))
y = sess.run(val, feed_dict={X: x})
print('y = ', y)
vals = output_from_outside_script(y)
print('vals = ', vals)
vals_tensor = tf.convert_to_tensor(vals, name='vals_tensor')
tf.summary.scalar('evaluation', vals_tensor)
writer = tf.summary.FileWriter(os.path.join('test_log'), sess.graph)
merged = tf.summary.merge_all()
summary = sess.run(merged, feed_dict={X: x})
writer.add_summary(summary)
writer.close()
输出:
('y = ', array([[-0.51137048, -0.16054343, -0.03827953, 0.1124011 , 0.09200752,
-0.22235785, 0.41357356, 1.04061067, -0.08877556, -0.86647421]],
('vals = ', -0.22920817)
张量板日志:
标量:
如有任何问题,请告诉我。