Visualizable Tensorflow

Visualizing tensorflow graphs can help you understand, debug, and optimize your network. But only if you are able to relate your code to the graph, which is not easy once things get complex.

The graph produce by the code of the next image
import tensorflow as tf
def create_variables():
a = tf.Variable(0)
b = tf.Variable(0)
return a,b
def do_some_computation(a, b):
sum_of_a_and_b = tf.add(a,b)
some_constant = tf.constant(5)
multiply_sum_by_constant = sum_of_a_and_b * some_constant
return multiply_sum_by_constant
with tf.Session() as sess:
a, b = create_variables()
do_some_computation(a, b)
writer = tf.summary.FileWriter('./summary', sess.graph)

Assigning name to variables, and creating a name scope for every function solves the problem but clutters yours code.

import tensorflow as tf
def create_variables():
with tf.name_scope('create_variables'):
a = tf.Variable(0, name='a')
b = tf.Variable(0, name='b')
return a,b
def do_some_computation(a, b):
with tf.name_scope('do_some_computation'):
sum_of_a_and_b = tf.add(a,b, name='sum_of_a_and_b')
some_constant = tf.constant(5, name='some_constant')
multiply_sum_by_constant = sum_of_a_and_b * some_constant
return multiply_sum_by_constant
with tf.Session() as sess:
a, b = create_variables()
do_some_computation(a, b)
writer = tf.summary.FileWriter('./ab2', sess.graph)

We can achieve the exact same thing by using the decorators vfun and vclass, defined below in the gist visualizable.py
This decorators are smart enough to find the name of the variable in python and pass it as the name argument to the tensoflow constructor.

import tensorflow as tf
@vfun
def create_variables():
a = tf.Variable(0)
b = tf.Variable(0)
return a,b
@vfun
def do_some_computation(a, b):
sum_of_a_and_b = tf.add(a,b)
some_constant = tf.constant(5)
multiply_sum_by_constant = sum_of_a_and_b * some_constant
return multiply_sum_by_constant
with tf.Session() as sess:
a, b = create_variables()
do_some_computation(a, b)
writer = tf.summary.FileWriter('./summary', sess.graph)

And here is the code for visualizable.py
If you find these decorators useful, like this article and I’ll make a proper python package out of them.