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!
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.
S'il vous plaît essayez:
from tensorflow.keras.models import Sequential
au lieu de
from keras.models import Sequential
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'])
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
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
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.
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)
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
Utilisez le suivant:
tf.compat.v1.disable_eager_execution()
print(tf.compat.v1.get_default_graph())
Cela fonctionne pour tensorflow 2.0
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])
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.
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