AttributeError: у объекта 'Sequential' нет атрибута 'output_names' - PullRequest
0 голосов
/ 05 октября 2018

У меня возникла проблема с приведенным ниже кодом следующей строки new_model = load_model ('124446.model', custom_objects = None, compile = True) Вот код:

import tensorflow as tf
from tensorflow.keras.models import load_model

mnist = tf.keras.datasets.mnist

(x_train,y_train), (x_test,y_test) = mnist.load_data()

x_train = tf.keras.utils.normalize(x_train,axis=1)
x_test = tf.keras.utils.normalize(x_test,axis=1)

model = tf.keras.models.Sequential()

model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(x_train,y_train,epochs=3)


tf.keras.models.save_model(model,'124446.model')


val_loss, val_acc = model.evaluate(x_test,y_test)
print(val_loss, val_acc)


new_model = load_model('124446.model', custom_objects=None, compile=True)


prediction = new_model.predict([x_test])
print(prediction)

Ошибки:

Traceback (последний вызов был последним): файл "C: /Users/TanveerIslam/PycharmProjects/DeepLearningPractice/1.py", строка 32, в new_model = load_model ('124446.model', custom_objects = Нет, compile = True) Файл "C: \ Users \ TanveerIslam \ PycharmProjects \ DeepLearningPractice \ venv \ lib \ site-packages \ tenorflow \ python \ keras \ engine \ save.py", строка 262, в load_model sample_weight_mode = sample_weight_mode) Файл "C: \ Users \ TanveerIslam \ PycharmProjects \ DeepLearningPractice \ venv \ lib \ site-packages \ tenorflow \ python \ training \ checkpointable \ base.py", строка 426, в методе _method_wrapper (self,* args, ** kwargs) Файл "C: \ Users \ TanveerIslam \ PycharmProjects \ DeepLearningPractice \ venv \ lib \ site-packages \ensorflow \ python \ keras \ engine \ training.py", строка 525, в метриках компиляции, self.имена выходных данных)

AttributeError: у объекта 'Sequential' нет атрибута 'output_names'

Так что любой может дать мне решение муравья.

Примечание: я использую pycharm какIDE.

Ответы [ 4 ]

0 голосов
/ 24 мая 2019
import tensorflow as tf    
tf.keras.models.save_model(
    model,
    "epic_num_reader.model",
    overwrite=True,
    include_optimizer=True
) 

new_model = tf.keras.models.load_model('epic_num_reader.model', custom_objects=None, compile=False)

predictions = new_model.predict(x_test)
print(predictions)

import numpy as np

print(np.argmax(predictions[0]))
plt.imshow(x_test[0],cmap=plt.cm.binary)
plt.show()
0 голосов
/ 26 ноября 2018

Я смог загрузить модель, установив compile = False в load_model ()

0 голосов
/ 30 декабря 2018

Как сказал @Shinva, чтобы установить атрибут "compile" функции load_model на "False".Затем после загрузки модели скомпилируйте ее отдельно.

from tensorflow.keras.models import save_model, load_model
save_model(model,'124446.model')

Затем для загрузки модели снова выполните:

saved_model = load_model('124446.model', compile=False)
saved_model.compile(optimizer='adam',
          loss='sparse_categorical_crossentropy',
          metrics=['accuracy'])
saved_model.predict([x_test])

Обновление : по некоторым неизвестным причинам яначали получать те же ошибки, что и вопрос состояния.После попытки найти разные решения кажется, что использование библиотеки «keras» напрямую вместо tenorsflow.keras работает нормально.

Моя установка на «Windows 10» с python: «3.6.7», tenenflow: «1.11.0» и keras: «2.2.4»

Насколько я знаю, тамтри разных способа сохранения и восстановления вашей модели;при условии, что вы использовали керас непосредственно для изготовления своей модели.

Опция 1:

import json
from keras.models import model_from_json, load_model

# Save Weights + Architecture
model.save_weights('model_weights.h5')
with open('model_architecture.json', 'w') as f:
    f.write(model.to_json())

# Load Weights + Architecture
with open('model_architecture.json', 'r') as f:
    new_model = model_from_json(f.read())
new_model.load_weights('model_weights.h5')

Опция 2:

from keras.models import save_model, load_model

# Creates a HDF5 file 'my_model.h5' 
save_model(model, 'my_model.h5') # model, [path + "/"] name of model

# Deletes the existing model
del model  

# Returns a compiled model identical to the previous one
new_model = load_model('my_model.h5')

Опция 3

# using model's methods
model.save("my_model.h5")

# deletes the existing model
del model

# load the saved model back
new_model = load_model('my_model.h5')

Опция 1 требует, чтобы new_model был скомпилирован перед использованием.

Варианты 2 и 3 почти схожи по синтаксису.

Используемые коды:
1. Сохранение и загрузка моделей Keras
2. https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model

0 голосов
/ 09 октября 2018

Если это выполняется в Windows, то проблема в том, что в настоящее время toco не поддерживается в Windows - https://github.com/tensorflow/tensorflow/issues/20975

...