Почему я не могу показать оценку загруженной маринованной модели глубокого обучения? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь сравнить разные алгоритмы для моего проекта анализа настроений. Когда я пытаюсь загрузить свою маринованную предварительно обученную модель, я получаю эту ошибку:

AttributeError: объект «Последовательный» не имеет атрибута «score3_9» error

Вот мой код для загрузки модели:

import pickle
import joblib

load_pickle_file = open('LSTM_MODEL3_9.pkl', 'rb')
loaded_model = pickle.load(load_pickle_file)

result = loaded_model.score3_9()

print(result) 

а вот код моей модели:

classifier= Sequential()
classifier.add(Embedding(vocab_size, 100, weights=[embedding_matrix] ,mask_zero=True))
classifier.add(LSTM(64,dropout=0.4,recurrent_dropout=0.5,return_sequences=True))
classifier.add(LSTM(64,dropout=0.5,recurrent_dropout=0.4,return_sequences=True))
classifier.add(LSTM(64,dropout=0.2,recurrent_dropout=0.2))
classifier.add(Dense(1, activation='sigmoid'))
classifier.compile(loss = 'binary_crossentropy', optimizer='adam',metrics = ['accuracy'])
classifier.summary()

LSTM_FIT = classifier.fit(X_train, y_train, batch_size=64, epochs=6, verbose=1)

score3_9 = classifier.evaluate(X_test, y_test, verbose=1)

print("Test Accuracy:", score3_9[1])
print("Test Score:", score3_9[0])


joblib.dump(classifier, 'LSTM_MODEL3_9.pkl')


with open('tokenizer.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

1 Ответ

0 голосов
/ 28 мая 2020

В сохраняемом вами классификаторе фактически нет результатов внутри него. Похоже, они хранятся в переменной score3_9. Чтобы исправить это или сохранить результаты вместе с моделью, будет работать следующий код:

# model definition here...

LSTM_FIT = classifier.fit(X_train, y_train, batch_size=64, epochs=6, verbose=1)

score3_9 = classifier.evaluate(X_test, y_test, verbose=1)

print("Test Accuracy:", score3_9[1])
print("Test Score:", score3_9[0])

save_data = {'classifier':classifier, 'score':score3_9}


joblib.dump(save_data, 'LSTM_MODEL3_9.pkl')


with open('tokenizer.pickle', 'wb') as handle:
    pickle.dump(tokenizer, handle, protocol=pickle.HIGHEST_PROTOCOL)

К которому вы можете получить доступ следующим образом:

import pickle
import joblib

load_pickle_file = open('LSTM_MODEL3_9.pkl', 'rb')
loaded_model = pickle.load(load_pickle_file)

result = loaded_model['score']

print(result)
...