Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tensorflow==2.0.0a0 - AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'

I'm using Tensorflow==2.0.0a0 and want to run the following script:

import tensorflow as tf
import tensorboard
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import tensorflow_probability as tfp
from tensorflow_model_optimization.sparsity import keras as sparsity
from tensorflow import keras

tfd = tfp.distributions

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    model = tf.keras.Sequential([
      tf.keras.layers.Dense(1,kernel_initializer='glorot_uniform'),
      tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1))
    ])

All my older notebooks work with TF 1.13. However, I want to develop a notebook where I use Model Optimization (Neural net pruning) + TF Probability, which require Tensorflow > 1.13.

All libraries are imported but init = tf.global_variables_initializer() generates the error:

AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'

Also, tf.Session() generates the error:

AttributeError: module 'tensorflow' has no attribute 'Session'

So I guess it may be something related to Tensorflow itself, but I don't have older versions confliciting in my Anaconda environment.

Outputs for libraries' versions:

tf.__version__
Out[16]: '2.0.0-alpha0'

tfp.__version__
Out[17]: '0.7.0-dev20190517'

keras.__version__
Out[18]: '2.2.4-tf'

Any ideas on this issue ?

like image 654
razimbres Avatar asked May 17 '19 20:05

razimbres


2 Answers

Tensorflow 2.0 goes away from session and switches to eager execution. You can still run your code using session if you refer to tf.compat library and disable eager execution:

import tensorflow as tf
import tensorboard
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import tensorflow_probability as tfp
from tensorflow_model_optimization.sparsity import keras as sparsity
from tensorflow import keras


tf.compat.v1.disable_eager_execution()


tfd = tfp.distributions

init = tf.compat.v1.global_variables_initializer()

with tf.compat.v1.Session() as sess:
    sess.run(init)

    model = tf.keras.Sequential([
      tf.keras.layers.Dense(1,kernel_initializer='glorot_uniform'),
      tfp.layers.DistributionLambda(lambda t: tfd.Normal(loc=t, scale=1))
    ])

You can convert any python script in that manner using:

tf_upgrade_v2 --infile in.py --outfile out.py
like image 128
y.selivonchyk Avatar answered Oct 20 '22 17:10

y.selivonchyk


I believe "Session()" has been removed with TF 2.0.

Instead, use Functions to graph (as per TensorFlow documentation): https://www.tensorflow.org/alpha/tutorials/eager/tf_function

Log of similar issue: https://github.com/tensorflow/community/pull/20/commits/9645a1249d3bdbe8e930af62d1958120a940c31d

like image 1
N.Yasarturk Avatar answered Oct 20 '22 18:10

N.Yasarturk