web-dev-qa-db-fra.com

Comment corriger "AttributeError: le module 'tensorflow' n'a pas d'attribut 'get_default_graph'"?

J'essaie d'exécuter du code pour créer un modèle LSTM mais j'obtiens une erreur:

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

Mon code est le suivant:

from keras.models import Sequential

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(LSTM(17))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

J'ai trouvé quelqu'un d'autre avec un problème similaire et ils ont mis à jour tensorflow et cela fonctionne; mais le mien est à jour et ne fonctionne toujours pas. Je suis novice dans l'utilisation des keras et de l'apprentissage automatique, donc je m'excuse si c'est quelque chose de stupide!

15
Alice

Il s'avère que j'utilisais la mauvaise version (2.0.0a0), j'ai donc réinitialisé la dernière version stable (1.13.1) et cela fonctionne.

3
Alice

S'il vous plaît essayez:

from tensorflow.keras.models import Sequential

au lieu de

from keras.models import Sequential

14
irezwi

pour le dernier tensorflow 2, remplacez le code ci-dessus par le code ci-dessous avec quelques modifications

pour plus de détails, consultez la documentation des keras: https://www.tensorflow.org/guide/keras/overview

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential, load_model

    model = tf.keras.Sequential()
    model.add(layers.Dense(32, input_dim=784))
    model.add(layers.Activation('relu'))
    model.add(layers.LSTM(17))
    model.add(layers.Dense(1, activation='sigmoid'))
    model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.01), metrics=['accuracy'])
6
Sana

OUI, cela ne fonctionnera pas puisque vous utilisez la version mise à jour de tensorflow c'est-à-dire tensorflow == 2.0, l'ancienne version de tensorflow pourrait vous aider. J'ai eu le même problème mais je l'ai résolu en utilisant le code suivant.

essayer:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout

au lieu:

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
1
Piyush Chandra

pour résoudre le problème, j'ai utilisé le code ci-dessous

à partir de tensorflow.keras.models import Séquentiel à partir de tensorflow.keras.layers import Dense import numpy

0
Jomo

Cela m'est également arrivé. La raison en est votre version tensorflow. Essayez d'obtenir une version plus ancienne de tensorflow. Un autre problème peut être que vous avez un script python nommé tensorflow.py dans votre projet.

0
Gihan Gamage

Pour tf 2.1.0 je passe à tf.compat.v1.get_default_graph()

import tensorflow as tf
# sess = tf.compat.v1.Session(graph=tf.import_graph_def(), config=session_conf)
sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)
tf.compat.v1.keras.backend.set_session(sess)

0
palandlom

J'ai eu le même problème. j'ai essayé

   from tensorflow.keras.models import Sequential

et

   from keras.models import Sequential

aucun d'eux ne fonctionne. Je mets donc à jour tensorflow, keras et python:

    $conda update python
    $conda update keras
    $conda update tensorflow

ou

    pip install --upgrade tensorflow
    pip install --upgrade keras
    pip install --upgrade python

Ma version tensorflow est 2.1.0; ma version keras est 2.3.1; ma python est la 3.6.10.

    pip uninstall keras
    pip install keras --upgrade
0
Hannah Zhang

Utilisez le suivant:

tf.compat.v1.disable_eager_execution()
print(tf.compat.v1.get_default_graph())

Cela fonctionne pour tensorflow 2.0

0
yash

En supposant que les personnes se référant à ce fil utiliseront de plus en plus tensorflow 2:

Tensorflow 2 intègre d'autres API de keras, car les keras sont conçus/développés très judicieusement. La réponse est très simple si vous utilisez tensorflow 2, comme décrit également ici :

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, LSTM

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(LSTM(17))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss=tensorflow.keras.losses.binary_crossentropy, optimizer=tensorflow.keras.optimizers.Adam(), metrics=['accuracy'])

et c'est ainsi que vous changez, on utiliserait quelque chose comme MNIST de la page officielle des keras en remplaçant simplement tensorflow.keras au lieu de keras et exécutez-le également sur gpu;

from __future__ import print_function
import tensorflow
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras import backend as K

batch_size = 1024
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = tensorflow.keras.utils.to_categorical(y_train, num_classes)
y_test = tensorflow.keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
             activation='relu',
             input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
          optimizer=tensorflow.keras.optimizers.Adadelta(),
          metrics=['accuracy'])

model.fit(x_train, y_train,
      batch_size=batch_size,
      epochs=epochs,
      verbose=1,
      validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
0
Hamidreza

Oui, le code ne fonctionne pas avec cette version de tensorflow tensorflow == 2.0.0. le passage à une version antérieure à 2.0.0 vous aidera.

0
poonam

La rétrogradation résoudra le problème, mais si vous souhaitez utiliser la dernière version, vous devez essayer ce code: from tensorflow import keras et 'from tensorflow.python.keras import backend as k C'est du travail pour moi

0
mj.beyrami