Как уменьшить время работы кода?

Имеется обученная модель, на основе которой необходимо проставить категорию текста из файла и записать данную категорию в другой файл. В файле более 20 000 строк.

for schetchik in range(list):
    text = descriptions[schetchik]

    tokenizer = Tokenizer()
    tokenizer = Tokenizer(num_words=num_words)
    tokenizer.fit_on_texts(descriptions)
    tokenizer.word_index
    sequences = tokenizer.texts_to_sequences(descriptions)

    sequence = tokenizer.texts_to_sequences([text])
    data = pad_sequences(sequence, maxlen=max_review_len)

    result = model.predict(data)
    prediction = model.predict(np.array(data))
    predicted_label = text_labels[np.argmax(prediction)]
    with open('PREDICT.csv', 'r+') as f:
        f.seek(0, 2)
        f.write(str(predicted_label)+"\n")
    print(text)
    print(predicted_label)

Ответы (1 шт):

Автор решения: Michael Tetelev

Я так понимаю, вы просите нечто типа код-ревью, держите.

for schetchik in range(list): - имя переменной у вас list?

for schetchik in range(list): text = descriptions[schetchik] -> for text in descriptions

tokenizer = Tokenizer();tokenizer = Tokenizer(num_words=num_words) - два раза создаёте какой-то сложный объект?

tokenizer.word_index - что это?

sequences = tokenizer.texts_to_sequences(descriptions);sequence = tokenizer.texts_to_sequences([text]) - если tokenizer.texts_to_sequences не меняет состояния tokenizer, то уверены ли вы, что вызывать надо именно так?

result = model.predict(data) - зачем?

for ... :
    with open('PREDICT.csv', 'r+') as f:
        f.seek(0, 2)
        f.write(str(predicted_label)+"\n")

не лучше ли заменить на:

with open('PREDICT.csv', 'r+') as f:
    for ... :
        f.write(f'{predicted_label}\n')

С учётом инфы, которую вы дали, это максимум, что вы можете получить в ответе. Проверьте, сколько у вас выполняется предсказание, а сколько весь остальной код, мб у вас модель работает 99% времени кода (по моим наблюдениям, при +- средней модели так и есть). Также настройте батчинг данных, перенесите выполнение на gpu, уменьшите модель в 5-10 раз. Готово, профит.

→ Ссылка