Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display weights and bias of the model on Tensorboard using python

I have created the following model for training and want to get it visualized on 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))

I want to know how I can get to see the weights and bias and the correlation between the inputs that I am giving for training.

Kindly, help me. Let me know if there is any suggestion if there is no answer to what I ask. Please ask me if there is anything required I will get it and let you know.

like image 747
Jaffer Wilson Avatar asked Aug 31 '18 09:08

Jaffer Wilson


1 Answers

I think the easiest way to visualize weights on Tensorboard is to plot them as histograms. For instance, you could log your layers as follows.

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

Once you have created a summary for each layer or variable that you want to log, you have to collect them all with the merge_all function and create a FileWriter.

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

Finally, you have to run the summaries with the other ops and add the results to your writer.

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

If you want to any further analysis with your weights, I would recommend to recover them as numpy arrays, as explained here.

I do not know any easy way to plot correlations on Tensorboard though. If you just want to get the correlation for your inputs, I would suggest using scikit or even pandas (.corr function) if your data set is not huge.

I hope that helps. You can also refer to this tutorial for a more in depth explanation.

like image 125
AlCorreia Avatar answered Oct 13 '22 00:10

AlCorreia