Я создал сеть LSTM, используя Keras для предсказания следующего слова на основе контекста предыдущих слов в предложении.Я написал код на Python, но должен развернуть его с существующим кодом C ++.Итак, как перевести этот кусок кода в C ++, поскольку я новичок в этом, и я использую встроенные функции в Python для того же.
Я пытался преобразовать каждую строку кода Pythonна C ++, но это отнимает много времени, также я даже не могу читать файлы hdf5 и pkl в C ++.Код Python:
from pickle import load
from keras.models import load_model
from keras.preprocessing.sequence import pad_sequences
def generate_seq(model, tokenizer, seq_length, seed_text, no_next_words):
result = []
in_text = seed_text
for _ in range(no_next_words):
# encode the text as integer
encoded = tokenizer.texts_to_sequences([in_text])[0]
# convert sequences to a fixed length
encoded = pad_sequences([encoded], maxlen=seq_length, truncating='pre')
# predict probabilities for each word
yhat = model.predict_classes(encoded, verbose=0)
# map predicted word index to word
out_word = ''
for word, index in tokenizer.word_index.items():
if index == yhat:
out_word = word
break
# append to input
in_text += ' ' + out_word
result.append(out_word)
return ' '.join(result)
# load the model
model = load_model('model_chat2_3.h5')
# load the tokenizer
tokenizer = load(open('tokenizer_chat2_3.pkl', 'rb'))
# generate new text
while(True):
inp = input("Enter:")
generated = generate_seq(model, tokenizer, 2,inp, 1)
print(generated)
Код C ++:
#include <iostream>
#include <fstream>
#include <typeinfo>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
ifstream myReadFile,myReadFile2;
myReadFile.open("/Users/Apple/New word_prediction/word_prediction/data/colab models/chat2_2/tokenizer_chat2_2.pkl");
myReadFile2.open("/Users/Apple/New word_prediction/word_prediction/data/colab models/chat2_2/model_chat2_2.h5");
char output[1200];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
cout<<output<<endl;
}
}
myReadFile.close();
myReadFile2.close();
return 0;
}
Выход C ++ выглядит как некоторая закодированная строка.
Я пытался ссылаться на предыдущие ответы, новсе они созданы специально для их вариантов использования.Например: Конвертировать модель Keras в C ++ .По сути, я построил модель keras с использованием сетей LSTM (скрытые слои: LSTM), в то время как в приведенной выше ссылке она построена для сети CNN с совершенно другой архитектурой.Если я перейду по вышеуказанной ссылке, мне придется полностью изменить код.Также в других подобных репозиториях они работают для CNN для обработки изображений, но в моем случае использования я должен предсказать следующие слова на основе контекста предыдущих слов через сеть LSTM.Эта модель имеет хорошую точность на консоли, но ее необходимо тестировать на клавиатуре мобильных приложений в реальном времени.
Поэтому мой вопрос заключается в том, что если есть метод или инструмент, с помощью которого я могу преобразовать некоторые изкод на C ++ или, по крайней мере, как я могу прочитать модель keras, построенную в сети LSTM (model_chat2_3.h5) и файлы tokenizer_chat2_3.pkl, в C ++.Кроме того, если кто-то может подсказать мне, чтобы напрямую развернуть модель keras в мобильном приложении, чтобы работать в качестве клавиатуры.Опять же, все существующие репозитории созданы для развертывания моделей на основе CNN в мобильном приложении для выполнения связанных с изображениями вещей
Модель Keras LSTM для Android Это также поможет, но никто еще не ответил на него.
Я новичок в C ++, поэтому не могу написать полный код для него, так как у меня есть ограничение по времени.Любая помощь приветствуется!