Загрузите и используйте модель Keras, построенную с использованием сети LSTM в C ++, или разверните эту модель в приложении iOS - PullRequest
0 голосов
/ 22 мая 2019

Я создал сеть 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 ++, поэтому не могу написать полный код для него, так как у меня есть ограничение по времени.Любая помощь приветствуется!

...