无法将 Tensorflow 标量摘要写入事件日志
Can't write Tensorflow scalar summary to event log
我正在尝试学习如何自己编写 tensorflow 代码,但我遇到了这个非常基本的问题:
在学习步骤中,我无法将任何标量摘要写入 Tensorboard 所需的事件文件。这是我的代码:
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
sess = tf.Session()
init = tf.global_variables_initializer()
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
_, loss_value = sess.run((train, loss))
if i % 50 == 0:
writer.add_summary(summary=loss_value, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()
我得到的错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-732ee0fb1e1c> in <module>()
27 _, loss_value = sess.run((train, loss))
28 if i % 50 == 0:
---> 29 writer.add_summary(summary=loss_value, global_step=i)
30 print(str(i)+" step: "+str(loss_value))
31 writer.flush()
/usr/local/lib/python3.6/dist-
packages/tensorflow/python/summary/writer/writer.py in add_summary(self,
summary, global_step)
123 # to save space - we just store the metadata on the first value
with a
124 # specific tag.
--> 125 for value in summary.value:
126 if not value.metadata:
127 continue
AttributeError: 'numpy.float32' object has no attribute 'value'
请帮助我更正我的代码,因为我已经阅读了很多关于该主题的问题,但从未遇到过这个具体问题。
谢谢
你应该完全创建你的图(损失和优化器是静态图的一部分),然后你应该创建会话,最后,你可以创建一个编写器。
保持正确的顺序,然后它会起作用。
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
_, loss_value = sess.run((train, loss))
if i % 50 == 0:
writer.add_summary(summary=loss_value, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()
summary operations. Another way to think about this is to wrap the element you want to summary by summary op rather than record the element directly. This wrapping will create "a Tensor containsing a Summary protobuf", which is the acceptable format of add_summary
收集标量摘要或任何一般摘要。
详细而言,您将通过以下方式创建摘要操作:
loss_summ = tf.summary.scalar('loss', loss)
然后 运行 这个操作得到 tensor/value:
_, loss_value, loss_summ_val = sess.run((train, loss, loss_summ))
最后,将返回的 tensor/value 而不是您实际的 loss_value
添加到摘要中:
writer.add_summary(summary=loss_summ_val, global_step=i)
只需进行最少的必要更改,以下代码即可运行。但是,正如 "nairouz mrabah" 在另一个答案中建议的那样,可以改进代码的结构。
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
sess = tf.Session()
init = tf.global_variables_initializer()
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
loss_summ = tf.summary.scalar('loss', loss)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
# _, loss_value = sess.run((train, loss))
_, loss_value, loss_summ_val = sess.run((train, loss, loss_summ))
if i % 50 == 0:
# writer.add_summary(summary=loss_value, global_step=i)
writer.add_summary(summary=loss_summ_val, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()
我正在尝试学习如何自己编写 tensorflow 代码,但我遇到了这个非常基本的问题: 在学习步骤中,我无法将任何标量摘要写入 Tensorboard 所需的事件文件。这是我的代码:
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
sess = tf.Session()
init = tf.global_variables_initializer()
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
_, loss_value = sess.run((train, loss))
if i % 50 == 0:
writer.add_summary(summary=loss_value, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()
我得到的错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-732ee0fb1e1c> in <module>()
27 _, loss_value = sess.run((train, loss))
28 if i % 50 == 0:
---> 29 writer.add_summary(summary=loss_value, global_step=i)
30 print(str(i)+" step: "+str(loss_value))
31 writer.flush()
/usr/local/lib/python3.6/dist-
packages/tensorflow/python/summary/writer/writer.py in add_summary(self,
summary, global_step)
123 # to save space - we just store the metadata on the first value
with a
124 # specific tag.
--> 125 for value in summary.value:
126 if not value.metadata:
127 continue
AttributeError: 'numpy.float32' object has no attribute 'value'
请帮助我更正我的代码,因为我已经阅读了很多关于该主题的问题,但从未遇到过这个具体问题。 谢谢
你应该完全创建你的图(损失和优化器是静态图的一部分),然后你应该创建会话,最后,你可以创建一个编写器。 保持正确的顺序,然后它会起作用。
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
init = tf.global_variables_initializer()
with tf.Session() as sess:
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
_, loss_value = sess.run((train, loss))
if i % 50 == 0:
writer.add_summary(summary=loss_value, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()
summary operations. Another way to think about this is to wrap the element you want to summary by summary op rather than record the element directly. This wrapping will create "a Tensor containsing a Summary protobuf", which is the acceptable format of add_summary
收集标量摘要或任何一般摘要。
详细而言,您将通过以下方式创建摘要操作:
loss_summ = tf.summary.scalar('loss', loss)
然后 运行 这个操作得到 tensor/value:
_, loss_value, loss_summ_val = sess.run((train, loss, loss_summ))
最后,将返回的 tensor/value 而不是您实际的 loss_value
添加到摘要中:
writer.add_summary(summary=loss_summ_val, global_step=i)
只需进行最少的必要更改,以下代码即可运行。但是,正如 "nairouz mrabah" 在另一个答案中建议的那样,可以改进代码的结构。
import tensorflow as tf
import numpy as np
WORKDIR = "/content/log"
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
sess = tf.Session()
init = tf.global_variables_initializer()
with tf.name_scope("TRAIN"):
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred)
loss_summ = tf.summary.scalar('loss', loss)
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
writer = tf.summary.FileWriter(WORKDIR + "/tmp/5", graph=sess.graph)
sess.run(init)
for i in range(1000):
# _, loss_value = sess.run((train, loss))
_, loss_value, loss_summ_val = sess.run((train, loss, loss_summ))
if i % 50 == 0:
# writer.add_summary(summary=loss_value, global_step=i)
writer.add_summary(summary=loss_summ_val, global_step=i)
print(str(i)+" step: "+str(loss_value))
writer.flush()
writer.close()