【问题标题】:Tensorboard not giving all the variables output for Visualization PythonTensorboard 未提供 Visualization Python 的所有变量输出
【发布时间】:2019-01-15 13:01:43
【问题描述】:

这是我为 tensorflow 训练、验证和测试初始化​​的变量。

index_in_epoch = 0;
perm_array  = np.arange(x_train.shape[0])
np.random.shuffle(perm_array)

# function to get the next batch
def get_next_batch(batch_size):
    global index_in_epoch, x_train, perm_array   
    start = index_in_epoch
    index_in_epoch += batch_size

    if index_in_epoch > x_train.shape[0]:
        np.random.shuffle(perm_array) # shuffle permutation array
        start = 0 # start next epoch
        index_in_epoch = batch_size

    end = index_in_epoch
    return x_train[perm_array[start:end]], y_train[perm_array[start:end]]

# parameters
n_steps = seq_len-1 
n_inputs = x_train.shape[2]#4 

n_neurons = 200
n_outputs = y_train.shape[1]#4
n_layers = 2
learning_rate = 0.001

batch_size = 50
n_epochs = 100#200 
train_set_size = x_train.shape[0]
test_set_size = x_test.shape[0]

tf.reset_default_graph()

X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None, n_outputs])

# use LSTM Cell with peephole connections
layers = [tf.contrib.rnn.LSTMCell(num_units=n_neurons, 
                                 activation=tf.nn.leaky_relu, use_peepholes = True)
         for layer in range(n_layers)]

multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)

stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons]) 
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)
outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])
outputs = outputs[:,n_steps-1,:] # keep only last output of sequence

loss = tf.reduce_mean(tf.square(outputs - y)) # loss function = mean squared error 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) 
training_op = optimizer.minimize(loss)

这是我训练和验证模型并收集值以通过张量板显示的方式:

saver = tf.train.Saver()
with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer())

    for iteration in range(int(n_epochs*train_set_size/batch_size)):
        x_batch, y_batch = get_next_batch(batch_size) # fetch the next training batch 
        writer = tf.summary.FileWriter("outputLogs", sess.graph)
        sess.run(training_op, feed_dict={X: x_batch, y: y_batch}) 
        writer.close()
        if iteration % int(5*train_set_size/batch_size) == 0:
            mse_train = loss.eval(feed_dict={X: x_train, y: y_train}) 
            mse_valid = loss.eval(feed_dict={X: x_valid, y: y_valid}) 
            print('%.2f epochs: MSE train/valid = %.10f/%.10f'%(
                iteration*batch_size/train_set_size, mse_train, mse_valid))
            save_path = saver.save(sess, "models\\model"+str(iteration)+".ckpt")

但是在运行命令之后:tensorboard --logdir outputLogs 我只得到了图表,而不是所有其他值图表,比如我在训练时可以显示的损失、错误或其他变量。见下图:

请帮我可视化所有可变参数或输入,以便我可以看到张量板上的内容,并使训练对我来说可行。

【问题讨论】:

    标签: python python-3.x tensorflow visualization tensorboard


    【解决方案1】:

    您必须告诉 TensorFlow 您想要跟踪您的损失。您只是将图表添加到作者。例如,您可以这样做来跟踪您的损失:

    loss = ... (your def)
    tf.summary.scalar('MyLoss', loss)
    
    # ... maybe add some other variables (you can also make histograms, images, etc. via tf.summary.historam(...))
    
    summ = tf.summary.merge_all()
    

    在您的会话中,您可以像以前一样创建编写器。然后您必须评估摘要操作并将其添加到编写器。但是,您应该在训练循环之外创建编写器,因为您不希望每次迭代都有编写器。您在 add_summary 方法中提供迭代作为参数。

    saver = tf.train.Saver()
    with tf.Session() as sess: 
        sess.run(tf.global_variables_initializer())
        writer = tf.summary.FileWriter("outputLogs", sess.graph)
    
        for iteration in range(int(n_epochs*train_set_size/batch_size)):
    
            x_batch, y_batch = get_next_batch(batch_size) # fetch the next training batch 
    
            [_, s] = sess.run([training_op, summ], feed_dict={X: x_batch, y: y_batch}) 
    
            writer.add_summary(s, iteration)
    
            if iteration % int(5*train_set_size/batch_size) == 0:
                mse_train = loss.eval(feed_dict={X: x_train, y: y_train}) 
                mse_valid = loss.eval(feed_dict={X: x_valid, y: y_valid}) 
                print('%.2f epochs: MSE train/valid = %.10f/%.10f'%(
                    iteration*batch_size/train_set_size, mse_train, mse_valid))
                save_path = saver.save(sess, "models\\model"+str(iteration)+".ckpt")
    

    您的训练代码应如下所示。

    【讨论】:

    • 我是否有可能在 Tensorboard 上获得更多价值,这将有助于我做出培训决定?你能指导和帮助吗?
    • 当然,正如我在帖子中所写,您可以在合并之前声明要跟踪的任意数量的摘要对象。
    • 那我可以把sess.run(training_op, feed_dict={X: x_batch, y: y_batch}) 写成s = sess.run(summ, feed_dict={X: x_batch, y: y_batch}) 吗?
    • 您是否可以在程序中向我展示我必须添加行的地方以及我尝试的方式和要点在这里:gist.github.com/JafferWilson/7b7ddd6eb8a5c5b34ced5152a149b8e1,你能有吗看看它一次,告诉我我做对了吗?运行 tensorboard 后,我在命令行中得到如下输出:gist.github.com/JafferWilson/45dc0313fb9ce59938686adf3639817a 请看一下
    • 我已经编辑了我的答案。请注意,summ 只是另一个节点,并不能取代您的训练操作!
    猜你喜欢
    • 2023-03-12
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2019-05-01
    • 2016-09-19
    • 2020-01-10
    相关资源
    最近更新 更多