我有一个非常基本的TensorFlow应用程序来测试逐行加载CSV数据并向TensorBoard添加各种摘要和可视化。我的输入CSV文件有18行和一串列 - 第一列XX列是'要素',后续YY列是0和1代表标签。
我注意到当我为包含功能和标签的变量创建Summaries时,TensorFlow从CSV中读取两倍的行,因此在给出18行的情况下,我不会循环18次,而是只循环9.只要我删除将功能和标签添加到摘要的代码,读数恢复正常。将其他变量添加到Summary,例如Cost / etc.这是函数的输出,而不是CSV,没有这个问题。
我还不知道我是否真的需要TensorBoard中的信息,所以我可以没有它,但我更愿意尽可能多地将信息输入TensorBoard,然后决定我需要什么保持。
这是预期的行为还是我做错了什么?
String.Empty
感谢您的投入!
答案 0 :(得分:1)
问题是每个session.run调用都是从队列中提取的(第一个是明确的,第二个是因为摘要操作依赖于队列数据)。如果您在同一个session.run调用中使用摘要和实际使用队列数据,而不是使用feed_dict来提供先前提取的数据,则不会丢弃任何数据。类似的东西:
examples, labels = input_pipeline(sampling_size, try_epochs)
x, y_ = examples, labels
W = tf.Variable(tf.random_normal([TS, TL], stddev=1), name='weights')
b = tf.Variable(tf.random_normal([TL], stddev=1), name='biaes')
y = tf.matmul(x, W) + b
# this one causes the issue
with tf.name_scope('Features'):
features = examples
# this one also causes the issue
with tf.name_scope('Labels'):
labDisp = labels
with tf.name_scope('Model'):
myModel = tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)
with tf.name_scope('Loss'):
lossFn = tf.reduce_mean(myModel)
with tf.name_scope('Optimizer'):
train_step = tf.train.AdamOptimizer(.05).minimize(lossFn)
a1 = tf.summary.histogram("Features", features)
a2 = tf.summary.histogram("Labels", labDisp)
a3 = tf.summary.histogram("Model", myModel)
a4 = tf.summary.scalar("Loss", lossFn)
merged_summary_op = tf.summary.merge([a1, a2, a3, a4])
with tf.Session() as sess:
gInit = tf.global_variables_initializer().run()
lInit = tf.local_variables_initializer().run()
summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
try:
while not coord.should_stop():
act = tf.argmax(labels, 1)
fit = tf.argmax(y, 1)
_, pAct, pFit, l, summary = sess.run([train_step, act, fit, lossFn,
merged_summary_op])
summary_writer.add_summary(summary, i)
print(pAct)
print(pFit)
except tf.errors.OutOfRangeError:
print('Finished')
finally:
coord.request_stop()
coord.join(threads)