【问题标题】:How to display weights and bias of the model on Tensorboard using python如何使用 python 在 Tensorboard 上显示模型的权重和偏差
【发布时间】:2019-02-06 07:52:20
【问题描述】:

我创建了以下训练模型,并希望在 Tensorboard 上将其可视化:

## Basic Cell LSTM 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 = 4 
n_neurons = 200 
n_outputs = 4
n_layers = 2
learning_rate = 0.001
batch_size = 50
n_epochs = 100 
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)

# run graph
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 
        sess.run(training_op, feed_dict={X: x_batch, y: y_batch}) 
        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 = %.6f/%.6f'%(
                iteration*batch_size/train_set_size, mse_train, mse_valid))

我想知道如何才能看到权重和偏差以及我为训练提供的输入之间的相关性。

请帮帮我。如果我的问题没有答案,请告诉我是否有任何建议。请询问我是否需要任何东西,我会得到并告诉您。

【问题讨论】:

    标签: python python-3.x tensorflow tensorboard


    【解决方案1】:

    我认为在 Tensorboard 上可视化权重的最简单方法是将它们绘制为直方图。例如,您可以按如下方式记录您的层。

    for i, layer in enumerate(layers):
        tf.summary.histogram('layer{0}'.format(i), layer)
    

    为要记录的每个层或变量创建摘要后,您必须使用 merge_all 函数将它们全部收集并创建一个 FileWriter。

    merged = tf.summary.merge_all()
    writer = tf.summary.FileWriter('directory_name', sess.graph)
    

    最后,您必须与其他操作一起运行摘要并将结果添加到您的编写器。

    summary, _ = sess.run([merged, training_op], feed_dict={X: x_batch, y: y_batch})
    writer.add_summary(summary, iteration_number)
    

    如果您想对权重进行进一步分析,我建议您将它们恢复为 numpy 数组,如 here 所述。

    我不知道有什么简单的方法可以在 Tensorboard 上绘制相关性。如果您只想获得输入的相关性,如果您的数据集不是很大,我建议您使用 scikit 甚至 pandas (.corr function)。

    我希望这会有所帮助。您也可以参考这个tutorial 以获得更深入的解释。

    【讨论】:

    • 让我检查一下,我会告诉你的。如果这对我有用,我会让你知道。但我的问题与权重和偏差有关。请在您的回答中也告诉我这一点。会有帮助的。
    • 当我应用你的建议时,我得到了这个:TypeError: Failed to convert object of type <class 'tensorflow.python.ops.rnn_cell_impl.LSTMCell'> to Tensor. Contents: <tensorflow.python.ops.rnn_cell_impl.LSTMCell object at 0x000001DF1A114FD0>. Consider casting elements to a supported type. 请告诉我
    • 我已经检查了链接。但它们对我没有用,因为我无法从中获得意义。因此,我提出了这个问题,以便我可以更清楚地理解它。
    • 很抱歉记录权重时出错。显然,使用 LSTM 单元有点棘手。您必须改为获取每个图层的变量属性。 This post详细解释。
    • 您建议的行给出了错误tf.summary.histogram('layer{0}'.format(i), layer)。如我的第二条评论所述,请让我知道这条线的错误原因。
    猜你喜欢
    • 2017-10-07
    • 2019-09-26
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2019-12-29
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多