Можно ли проводить непрерывное обучение в керас для решения задачи мультиклассовой классификации? - PullRequest
0 голосов
/ 28 июня 2019

меня пытались продолжить тренировки в керасе. потому что я построил мультиклассовую модель классификации keras после того, как у меня появились новые метки и значения. поэтому я хочу построить новую модель без переподготовки. Вот почему я попробовал непрерывный поезд в Керасе.

model.add(Dense(10, activation='sigmoid'))

model.compile(optimizer='rmsprop',
            loss='sparse_categorical_crossentropy',
            metrics=['accuracy'])


model.fit(training_data, labels, epochs=20, batch_size=1)

model.save("keras_model.h5")

после завершения сохранения модели, я хочу продолжить обучение. так что я попробовал,

model1 = load_model("keras_model.h5")
model1.fit(new_input, new_label, epochs=20, batch_size=1)
model1.save("keras_model.h5")

Я попробовал это. но была брошена ошибка. как раньше 10 классов. но теперь мы добавляем новый класс, значит произошла ошибка.

Итак, в чем мой вопрос, возможно ли продолжить обучение керасу для мультиклассовой классификации для нового класса?

tenorflow.python.framework.errors_impl.InvalidArgumentError: Получено значение метки 10, которое находится за пределами допустимого диапазона [0, 9). этикетка значения: 10 [[{{узел Потери / dense_7_loss / SparseSoftmaxCrossEntropyWithLogits / SparseSoftmaxCrossEntropyWithLogits}}]]

1 Ответ

1 голос
/ 28 июня 2019

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

Непроверенный пример:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import Model

def make_inner_model():
  """ An example model that takes 42 features and outputs a
  transformation vector.
  """
  inp = Input(shape=(42,), name='in')
  h1 = Dense(80, activation='relu')(inp)
  h2 = Dense(40)(h1)
  h3 = Dense(60, activation='relu')(h2)
  out = Dense(32)(h3)
  return Model(inp, out)

def make_outer_model(inner_model, n_classes):
  inp = Input(shape=(42,), name='inp')
  hidden = inner_model(inp)
  out = Dense(n_classes, activation='softmax')(hidden)
  model = Model(inp, out)
  model.compile('adam', 'categorical_crossentropy')
  return model

inner_model = make_inner_model()

inner_model.save('inner_model_untrained.h5')

model1 = make_outer_model(inner_model, 10)
model1.summary()

# model1.fit()
# inner_model.save_weights('inner_model_weights_1.h5')

model2 = make_outer_model(inner_model, 12)

# model2.fit()
# inner_model.save_weights('inner_model_weights_2.h5')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...