web-dev-qa-db-ja.com

AttributeError: 'Sequential' object has no attribute 'output_names'

次の行のコードに問題があります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)

エラーは次のとおりです。

トレースバック(最新の呼び出しは最後):ファイル "C:/Users/TanveerIslam/PycharmProjects/DeepLearningPractice/1.py"、32行目、new_model = load_model( '124446.model'、custom_objects = None、compile = True)File " C:\ Users\TanveerIslam\PycharmProjects\DeepLearningPractice\venv\lib\site-packages\tensorflow\python\keras\engine\saving.py "、行262、load_model sample_weight_mode = sample_weight_mode)ファイル" C:\ Users\TanveerIslam\PycharmProjects\DeepLearningPractice\venv\lib\site-packages\tensorflow\python\training\checkpointable\base.py "、行426、_method_wrapper method(self、* args、** kwargs)ファイル" C:\ Users\TanveerIslam\PycharmProjects\DeepLearningPractice\venv\lib\site-packages\tensorflow\python\keras\engine\training.py "、525行目、コンパイルメトリック、self.output_names)

AttributeError: 'Sequential' object has no attribute 'output_names'

だから誰でも私にアリの解決策を与えることができます。

注:私はpycharmをIDEとして使用しています。

3
Tanveer Islam

compile = Falseload_model()に設定することでモデルをロードできました

1
Shinva

これがWindowsで実行されている場合、問題は現在tocoがWindowsでサポートされていないことです https://github.com/tensorflow/tensorflow/issues/20975

0
surya
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()

@Shinvaがload_model関数の「compile」属性を「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])

更新:不明な理由により、質問の状態と同じエラーが発生し始めました。異なる解決策を見つけようとした後、「tensorflow.keras」の代わりに「keras」ライブラリを直接使用すると、正しく動作するようです。

私のセットアップはpython: '3.6.7'、tensorflow: '1.11.0'およびkeras: '2.2.4'を含む「Windows 10」上にあります

私の知る限りでは、モデルを保存および復元する方法は3つあります。ケラスを直接使用してモデルを作成した場合。

オプション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')

Option2:

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
Vaibhav Singh