Учитывая, что вы задаете два разных вопроса, я отвечаю на оба вопроса отдельно:
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