I have a few tensors in my code and and need to get the values of those tensors. This is one them. How to print the values of tensor OA?
Input:OA
Output: <tf.Tensor 'Sum_1:0' shape=(1, 600) dtype=float32>
Input:type(OA)
Output: tensorflow.python.framework.ops.Tensor
I have tried all the available functions like tf.print(), eval(), tensor.numpy(). None of them worked for me in Tensorflow 2.0. It seems they work only for 'EagerTensor' and not for 'ops.Tensor'.
1) OA.eval(session=sess) Error: ValueError: Cannot use the given session to evaluate tensor: the tensor's graph is different from the session's graph.
2) tf.print(OA) Output:
3) print (OA.numpy()) Output: AttributeError: 'Tensor' object has no attribute 'numpy'
Is there any way to convert ops.Tensor to EagerTensor to try the above functions? Or is there any other option to print the values of ops.Tensor. Please advise.
--Adding the minimal code to reproduce the example ops.Tensor in TF2.0.
!pip install tensorflow==2.0.0
tf.__version__
import tensorflow as tf
from keras.layers import Dense, Conv1D, MaxPooling1D, Flatten, Dropout, Input, Embedding, Bidirectional, LSTM
from tensorflow.keras import regularizers
EMBEDDING_DIM = 300
max_length = 120
batch_size = 512
vocab_size = 1000
units = 300
from keras.layers import Dense, Conv1D, MaxPooling1D, Flatten, Dropout, Input, Embedding, Bidirectional, LSTM
from tensorflow.keras import regularizers
input_text = tf.keras.Input(shape= (max_length), batch_size=batch_size)
embedding_layer = tf.keras.layers.Embedding(vocab_size, EMBEDDING_DIM, input_length =max_length, name="Embedding_Layer_1")
embedding_sequence = embedding_layer(input_text)
HQ = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(units,recurrent_dropout=0.5,kernel_regularizer=regularizers.l2(0.001),return_sequences=True,name='Bidirectional_1'))(embedding_sequence)
HQ = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(units,recurrent_dropout=0.5,kernel_regularizer=regularizers.l2(0.001),name='Bidirectional_2'))(HQ)
print (HQ)
Output: Tensor("bidirectional_3/concat:0", shape=(512, 600), dtype=float32)
type(HQ)
Output: tensorflow.python.framework.ops.Tensor
How to check the actual values of this tensor?
[A]: To print the value of a tensor without returning it to your Python program, you can use the tf. print() operator, as Andrzej suggests in another answer.
We use Indexing and Slicing to access the values of a tensor. Indexing is used to access the value of a single element of the tensor, whereasSlicing is used to access the values of a sequence of elements. We use the assignment operator to modify the values of a tensor.
Print() for printing the type of a Tensor because the Tensor's type does not change during the session run. The Tensor type is determined when you build the graph, so just use print(x. dtype) .
Your graph is not complete at the point you are printing HQ. You need to complete the model creation. Presumably something like
output = tf.keras.layers.xyz()(HQ)
model = tf.keras.models.Model(input_text, output)
The trick to print an intermediate layer is to just make it an output. You can make it an additional output of your existing model temporarily, or just make a new model.
inspection_model = tf.keras.models.Model(input_text, [output, HQ])
now run inference on your inspection_model to get the value of the intermediate activation HQ.
print(inspection_model(xyz))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With