Variable reuse in TensorFlow with example in Python
Hey Everyone,
I hope you all are doing well and enjoying the Learning Process.
In this article, we will be Understanding the Tensorflow variable and how to reuse it. Just like the variables in terms of Programming even TensorFlow has its own variable.
Now the question might arise how the programming variables vary from the Tensorflow variables?.
When it comes to TensorFlow the Tensorflow variable allows us to share variables in the program in a more robust way.
We will be understanding and executing the TensorFlow variable and its Reuse.
Let’s dive into the Explanation
We want to convert the Total Marks into the CGPA (Cumulative Grade Point Average) for 3 Students.
The Name of 3 Students are:
- Sahil
- Kartik
- Kamlesh
Each student will enter their total marks out of let’s say 800 and it will be converting it into CGPA (out of 10).
Code and Explanation start here:
The module which we will be working on is Tensorflow.
import tensorflow.compat.v1 as tf print("Tensorflow version 1 has been Imported")
Output:
Tensorflow version 1 has been Imported
To disable the Version 2 behavior in the Tensorflow Program we can type the following:
tf.disable_v2_behavior() print("Version 2 has been Disabled")
Output:
Version 2 has been Disabled
Let us define a function that will convert the Total Marks into CGPA which will have TensorFlow Variables. The datatype
def marks_to_cgpa(marks): """Convert Marks into CGPA """ with tf.variable_scope("CGPA") as scope: total_marks = tf.get_variable("total_marks", (), dtype=tf.float32, initializer=tf.constant_initializer(800.0)) # 0.05% total_cgpa = tf.get_variable("cgpa", (), dtype=tf.float32, initializer=tf.constant_initializer(10.0)) # $10 student_marks = marks / total_marks * total_cgpa return student_marks print("marks_to_cgpa function has been created")
Output:
marks_to_cgpa function has been created
CGPA Formula:
CGPA(Cumulative Grade Point Average) = Marks of Student * 10
———————————–
800
Let’s create a TensorFlow Global Variable initialization function, run the tensor (i.e. Sahil) and look at the Sahil’s CGPA.
def main(): #Sahil marks is entered in the Function marks_to_cgpa sahil = marks_to_cgpa(450) init = tf.global_variables_initializer() # Setting up the operator to assign all init values to variables with tf.Session() as sess: sess.run(init) # Actually assign initial value to variables cgpa = sess.run(sahil) #Run the tensor name sahil print("CGPA of Sahil: %f" % (cgpa)) #After running the session we will get the CGPA of Sahil if __name__ == "__main__": main()
Output:
CGPA of Sahil: 5.625000
Now, Looking at the below code we may conclude that the following will return CGPA of Kartik and Kamlesh.
Let run this code.
#CGPA for Kartik and Kamlesh kartik = marks_to_cgpa(650) print("CGPA of Kartik: %f" % (kartik)) kamlesh = marks_to_cgpa(780) print("CGPA of Kamlesh: %f" % (kamlesh))
Output:
ValueError: Variable CGPA/total_marks already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
File "C:\Users\NIlesh\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py", line 1751, in __init__
self._traceback = tf_stack.extract_stack()
File "C:\Users\NIlesh\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3429, in _create_op_internal
op_def=op_def)
File "C:\Users\NIlesh\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\framework\ops.py", line 3360, in create_op
attrs, op_def, compute_device)
File "C:\Users\NIlesh\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\util\deprecation.py", line 507, in new_func
return func(*args, **kwargs)
File "C:\Users\NIlesh\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow_core\python\framework\op_def_library.py", line 793, in _apply_op_helper
op_def=op_def)
It is an Error because the Tensorflow Variable by default doesn’t allow to reuse its Variable.
To Execute the above set of code we have to set reuse as True (i.e.reuse = True
). In the variable_scope of the marks_to_cgpa, we will add a parameter reuse = True in the variable_scope
of the main()
.
The Function should look similar to the following code:
def marks_to_cgpa(marks): """Convert Marks into CGPA """ with tf.variable_scope("CGPA", reuse=True) as scope: # we have added a parameter reuse = True total_marks = tf.get_variable("total_marks", (), dtype=tf.float32, initializer=tf.constant_initializer(800.0)) # 0.05% total_cgpa = tf.get_variable("cgpa", (), dtype=tf.float32, initializer=tf.constant_initializer(10.0)) # $10 student_marks = marks / total_marks * total_cgpa return student_marks
Another issue with the set of code is that the function marks_to_cgpa
returns a tensor and not the Real Number.
And hence we won’t be able to print the CGPA of Kartik and Kamlesh.
Let us Resolve the Errors and rewrite the code.
#CGPA for Kartik and Kamlesh def main_new(): init = tf.global_variables_initializer() # Set up operator to assign all init values to variables with tf.Session() as sess: sess.run(init_op) # Actually assign initial value to variables kartik = marks_to_cgpa(650) kamlesh = marks_to_cgpa(780) kartik_cgpa = sess.run(kartik) print("CGPA of Kartik: %f" % (kartik_cgpa)) kamlesh_cgpa = sess.run(kamlesh) print("CGPA of Kamlesh: %f" %(kamlesh_cgpa)) if __name__ == "__main__": main_new()
Output:
CGPA of Kartik: 8.125000 CGPA of Kamlesh: 9.750000
Now, The Problem is if reuse = True
, we go into reuse mode for this scope as well as all sub-scopes.
And if reuse = tf.AUTO_REUSE
, we create variables if they do not exist.
When you terminate the program and you run the code again while running main()
the function which is for getting Sahil’s CGPA will generate an Error.
Output:
ValueError: Variable CGPA/total_marks does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=tf.AUTO_REUSE in VarScope?
To create a variable and reuse it when the variable does not exist we will type reuse = tf.AUTO_REUSE
in the main()
function.
I hope till here you had a great Journey.
I Highly recommend my reader to enter their total marks into the marks_to_cgpa
and look at their result.
TensorFlow 2.0.0 Documentation: CLICK HERE
Leave a Reply