web-dev-qa-db-fra.com

AttributeError: l'objet 'Sequential' n'a pas d'attribut '_get_distribution_strategy'

Je suis en train de suivre un cours en ligne sur LinkedIn reclassant la construction de modèles via Keras.

Ceci est mon code. (Ceci est censé fonctionner)

import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import *

training_data_df = pd.read_csv("sales_data_training_scaled.csv")

X = training_data_df.drop('total_earnings', axis=1).values
Y = training_data_df[['total_earnings']].values

# Define the model
model = Sequential()
model.add(Dense(50, input_dim=9, activation='relu', name='layer_1'))
model.add(Dense(100, activation='relu', name='layer_2'))
model.add(Dense(50, activation='relu', name='layer_3'))
model.add(Dense(1, activation='linear', name='output_layer'))
model.compile(loss='mean_squared_error', optimizer='adam')


# Create a TensorBoard logger
logger = keras.callbacks.TensorBoard(
    log_dir='logs',
    write_graph=True,
    histogram_freq=5
)


# Train the model
model.fit(
    X,
    Y,
    epochs=50,
    shuffle=True,
    verbose=2,
    callbacks=[logger]
)

# Load the separate test data set
test_data_df = pd.read_csv("sales_data_test_scaled.csv")

X_test = test_data_df.drop('total_earnings', axis=1).values
Y_test = test_data_df[['total_earnings']].values

test_error_rate = model.evaluate(X_test, Y_test, verbose=0)
print("The mean squared error (MSE) for the test data set is: {}".format(test_error_rate))

J'obtiens l'erreur suivante lorsque le code suivant a été exécuté.

Using TensorFlow backend.
2020-01-16 13:58:14.024374: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-01-16 13:58:14.037202: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fc47b436390 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-01-16 13:58:14.037211: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
Traceback (most recent call last):
  File "/Users/himsaragallage/Documents/Building_Deep_Learning_apps/06/model_logging final.py", line 35, in <module>
    callbacks=[logger]
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training.py", line 1239, in fit
    validation_freq=validation_freq)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training_arrays.py", line 119, in fit_loop
    callbacks.set_model(callback_model)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/callbacks/callbacks.py", line 68, in set_model
    callback.set_model(model)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/callbacks/tensorboard_v2.py", line 116, in set_model
    super(TensorBoard, self).set_model(model)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_core/python/keras/callbacks.py", line 1532, in set_model
    self.log_dir, self.model._get_distribution_strategy())  # pylint: disable=protected-access
AttributeError: 'Sequential' object has no attribute '_get_distribution_strategy'

Process finished with exit code 1

Pendant que j'essayais de déboguer

J'ai découvert que cette erreur était due au fait que j'essaie d'utiliser un tensorboard logger. Plus précisément. Lorsque j'ajoute callbacks=[logger]. Sans cette ligne de code, le programme s'exécute sans aucune erreur. Mais Tensorboard ne sera pas utilisé.

Veuillez me suggérer une méthode dans laquelle je peux éliminer l'erreur, exécutez avec succès le script python.

3
Himsara Gallege

Vous pouvez trouver this post utile.

Donc, au lieu d'importer à partir de keras (c'est-à-dire)

from keras.models import Sequential

importer depuis tensorflow:

from tensorflow.keras.models import Sequential

Et cela s'applique bien sûr à la plupart des autres importations.

C'est juste une chance car je ne peux pas exécuter votre code, mais j'espère que cela vous aidera!

1
Pörripeikko

Il semble que votre environnement python) mélange les importations de keras et tensorflow.keras. Essayez d'utiliser Sequential module comme ceci:

model = tensorflow.keras.Sequential()
0

Je recommanderais de ne pas mélanger keras et tf.keras. Ce sont des projets différents car keras est le projet original multi-backend et tf.keras est la version intégrée à tensorflow. Keras cessera de prendre en charge d'autres backends, mais tensorflow, il est donc conseillé de basculer dessus. Vérifiez https://keras.io/#multi-backend-keras-and-tfkeras

Un moyen simple de le faire est d'importer des keras depuis tensorflow:

import tensorflow as tf
import tensorflow.keras as keras
#import keras
import keras.backend as K
from keras.models import Model, Sequential, load_model
from keras.layers import Dense, Embedding, Dropout, Input, Concatenate

print("Python: "+str(sys.version))
print("Tensorflow version: "+tf.__version__)
print("Keras version: "+keras.__version__)
Python: 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0]
Tensorflow version: 2.1.0
Keras version: 2.2.4-tf
0
EduardoFV