Можно ли обновить существующую модель классификации текста в tenorflow? - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в Python и выполняю классификацию текста с tenorflow. Я хотел бы знать, может ли эта модель классификации текста обновляться с каждым новым данными, которые я мог бы получить в будущем, чтобы мне не пришлось обучать модель с нуля. Кроме того, иногда со временем количество классов также может быть больше, так как я в основном имею дело с данными клиентов. Можно ли обновить эту существующую модель классификации текста данными, содержащими большее количество классов, используя существующие контрольные точки?

1 Ответ

0 голосов
/ 30 августа 2018

Учитывая, что вы задаете два разных вопроса, я отвечаю на оба вопроса отдельно:

1) Да, вы можете продолжить обучение с новыми данными, которые вы получили. Это очень просто, вам просто нужно восстановить вашу модель, как вы это делаете сейчас, чтобы использовать ее. Вместо того, чтобы запускать некоторые заполнители, такие как выходные данные или прогнозирование, вы должны запустить операцию оптимизатора. Это переводит в следующий код:

model = build_model() # this is the function that build the model graph
saver = tf.train.Saver()
with tf.Session() as session:
    saver.restore(session, "/path/to/model.ckpt")
########### keep training #########
data_x, data_y = load_new_data(new_data_path)
for epoch in range(1, epochs+1):
    all_losses = list()
    num_batches = 0
    for b_x, b_y in batchify(data_x, data_y)
        _, loss = session.run([model.opt, model.loss], feed_dict={model.input:b_x, model.input_y : b_y}
        all_losses.append(loss * len(batch_x))
        num_batches += 1
    print("epoch %d - loss: %2f" % (epoch, sum(losses) / num_batches))

обратите внимание, что теперь вам нужно указать имя операций, определенных моделью, чтобы запустить оптимизатор (model.opt) и op op (model.loss) для обучения и мониторинга потерь во время обучения.

2) Если вы хотите изменить количество меток, которые вы хотите использовать, то это немного сложнее. Если ваша сеть имеет прямую однослойную связь, то делать особо нечего, потому что вам нужно изменить размерность матрицы, тогда вам нужно переучивать все с нуля. С другой стороны, если у вас есть, например, многослойная сеть (например, плотный слой LSTM +, который выполняет классификацию), то вы можете восстановить веса старой модели и просто обучить с нуля последний слой. Для этого я рекомендую вам прочитать этот ответ https://stackoverflow.com/a/41642426/4186749

...