我正在尝试学习如何使用tensorflow和tensorboard.我有一个基于MNIST神经网络教程的测试项目.
在我的代码中,我构造了一个节点,用于计算正确分类的数据集中的数字部分,如下所示:
correct = tf.nn.in_top_k(self._logits, labels, 1)
correct = tf.to_float(correct)
accuracy = tf.reduce_mean(correct)
Run Code Online (Sandbox Code Playgroud)
这self._logits是图表的推理部分,labels是包含正确标签的占位符.
现在,我想做的是在训练进行时评估训练集和验证集的准确性.我可以通过运行精度节点两次,使用不同的feed_dicts来完成此操作:
train_acc = tf.run(accuracy, feed_dict={images : training_set.images, labels : training_set.labels})
valid_acc = tf.run(accuracy, feed_dict={images : validation_set.images, labels : validation_set.labels})
Run Code Online (Sandbox Code Playgroud)
这按预期工作.我可以打印这些值,我可以看到,最初,两个精度都会增加,最终验证精度会在训练精度不断提高时变平.
但是,我还想在tensorboard中得到这些值的图表,我无法弄清楚如何做到这一点.如果我只是添加一个scalar_summaryto accuracy,则记录的值将不区分训练集和验证集.
我还尝试创建两个accuracy具有不同名称的相同节点,并在训练集上运行一个,在验证集上运行一个.然后我scalar_summary为每个节点添加一个.这确实在张量板中给出了两个图形,但是它们不是显示训练集精度的一个图形而是显示验证集精度的图形,而是显示与打印到终端的任何一个都不匹配的相同值.
我可能误解了如何解决这个问题.对于不同的输入,单独记录单个节点的输出的推荐方法是什么?
我正在尝试在张量流中实现简单的线性回归(目的是最终将其扩展到更高级的模型中)。我当前的代码如下:
def linear_regression(data, labels):
# Setup placeholders and variables
num_datapoints = data.shape[0]
num_features = data.shape[1]
x = tf.placeholder(tf.float32, [None, num_features])
y_ = tf.placeholder(tf.float32, [None])
coeffs = tf.Variable(tf.random_normal(shape=[num_features, 1]))
bias = tf.Variable(tf.random_normal(shape=[1]))
# Prediction
y = tf.matmul(x, coeffs) + bias
# Cost function
cost = tf.reduce_sum(tf.pow(y-y_, 2))/(2.*num_datapoints)
# Optimizer
NUM_STEPS = 500
optimizer = tf.train.AdamOptimizer()
train_step = optimizer.minimize(lasso_cost)
# Fit the model
init = tf.initialize_all_variables()
cost_history = np.zeros(NUM_STEPS)
sess = tf.Session()
sess.run(init)
for i in range(NUM_STEPS):
if i % 100 == …Run Code Online (Sandbox Code Playgroud)