Керас: Моя потеря модели и точность случайным образом падают до нуля - PullRequest
1 голос
/ 19 марта 2019

У меня довольно сложная последовательность для модели декодера последовательности кодировщика.Я столкнулся с проблемой, когда мои потери и точность упали до нуля, и я не могу воспроизвести эту ошибку.Это не имеет ничего общего с тренировочными данными, как это происходит с различными наборами.

Кажется, что это обучение, поскольку потеря медленно падает.Вот то, на что это похоже прямо перед этим:

Epoch 1/2
5000/5000 [==============================] - 235s 47ms/step - loss: 0.9825 - acc: 0.7077
Epoch 2/2
5000/5000 [==============================] - 235s 47ms/step - loss: 0.9443 - acc: 0.7177

А вот то, на что это похоже на следующей итерации mode.fit ():

Epoch 1/2
2882/2882 [==============================] - 136s 47ms/step - loss: 0.7033 - acc: 0.4399
Epoch 2/2
2882/2882 [==============================] - 136s 47ms/step - loss: 1.1921e-07 - acc: 0.0000e+00

После этого потеря и точностьоставайтесь прежними:

Epoch 1/2
5000/5000 [==============================] - 278s 56ms/step - loss: 1.1921e-07 - acc: 0.0000e+00
Epoch 2/2
5000/5000 [==============================] - 279s 56ms/step - loss: 1.1921e-07 - acc: 0.0000e+00

Причина, по которой я должен тренироваться таким образом, заключается в том, что у меня есть переменные входные размеры и выходные размеры.Таким образом, я должен составить пакеты своих тренировочных данных с фиксированным размером ввода, прежде чем я буду тренироваться.

sgd = optimizers.SGD(lr= 0.015, decay=0.002)
out2 = model.compile(loss='categorical_crossentropy',
             optimizer=sgd,
             metrics=['accuracy'])

Мне нужно использовать программу обучения, чтобы достичь предсказаний на уровне предложений, поэтому я делаю следующее: я изначально тренирую своимодель для вывода токена "1 слово + конец".Тренировка на этом работает отлично.Когда я начинаю тренироваться на «2 слова + конец», эта проблема начинает возникать.

После обучения на 1 слове я сохраняю модель.Затем я определяю новую модель с размером вывода для 2 слов и использую следующее:

new_model = createModel(...,num_output_words)
new_model.set_weights(old_model.get_weights())

Я должен сделать это, так как не могу определить модель с переменной длиной вывода.

Я могу предоставить больше информации, если это необходимо.Я не могу найти информацию в Интернете.

...