Using tf. Print() in TensorFlow

Using tf.Press () in TensorFlow

I know you will definitely use debuggers correctly, every time, and will never use print statements to debug your code. Right?

Because if you did, you might find that TensorFlow's print statement doesn't work like normal print statements.

Today I'm going to show you how TenserFlow's print statement works, and how to make the most of it, hopefully saving you some confusion along the way.

Printing in TensorFlow

There are a few ways to print things out when writing the TensorFlow code. Of course, there is the classic Python built-in, print (or function print (), if we're going to be Python about it). And then there's TensorFlow's print function, TFprint (note the capital P).

When working with TensorFlow, it should not be forgotten that everything is ultimately a graph calculation. This means that if you print a TensorFlow operator using a Python print, it only shows a description of what that operation is because no values ​​have been passed through it. It also often shows the dimensions that are expected to occur in the node, if they are familiar.

If you want to print the values ​​that are being "flowed" through a particular part of the graph, then we should get it using tf.Press.

Configuring Your Print Node

Often we think of print as something we add in favor of something, after the fact, and just let it run, and then return to the normal flow of our operations. In TensorFlow, only the nodes of the graph that need to be executed to calculate the output will be executed. So if you have a 'dya ling ling' print node in your graph, it will not be implemented.

So what should we do? We must divide the print call into graphs, such as:
Image for post

The way the code appears is to pass the print call, as its first parameter, to the node that is its 'input', and assign a return value to tf. Press which then serves as the input to the node. In the graph, so add the print statement to the sequence of operations. (It is very important that you actually use this returned node because if you don't, it will be messy.)

While the print statement does not count and only passes the tensor (s) forward, it prints the desired node as a side effect.

Another behavior that we used to look at in a print statement is different from the print node that we introduce in the graph is only the print statement when the print statement occurs, i.e. when the node reaches the node in the computational graph. However, there are not many restrictions on what you can print.

That is, it only marks the place where you want the print statement, but you can print any nodes in the graph that it can access. This tf. The second argument of the print call is the array of nodes to print. Usually, we will only use the same node as the first argument, which is the input, but we can add more nodes to the print if needed.

There is also a third argument, the message. This allows you to prepare some strip prep before printing the nodes, so you can easily find the print statement in your log.

Putting it into practice

So you have it, tf.Press in a nutshell. But where can you use tf.Press in your code?
I often find in my input functions using tf. Press, to debug the same as what is being passed in my training loop. Using Python print alone is not enough here as it only prints once when the input function graph is created.

Instead, we use the input function in the data pipeline tf. We will introduce a print call. Note that we are only printing the same value that we crossed as input, but you can certainly print other nodes as well.

Some more advice

Note that the print output is shown in stderr on the console of my Jupyter notebook, not just as the output in the notebook. Keep this in mind when searching for your print output!

Another word of caution: if you use tf.Press in the input function, be sure to limit the amount of data you have passed, otherwise, you may end up scrolling through a very long console window :

There are many ways where TensorFlow's print statement is not your specific print statement, but it can have a big impact when you need to move tensors to your graph.