Я работаю над коротким проектом, который включает в себя реализацию символьного RNN для генерации текста. В моей модели используется один слой LSTM с различными единицами измерения (от 50 до 500), выпадением со скоростью 0,2 и активацией softmax. Я использую RMSprop со скоростью обучения 0,01.
Моя проблема в том, что я не могу найти хороший способ охарактеризовать потерю проверки. Я использую разделение проверки на 0,3 и обнаруживаю, что потери проверки становятся постоянными только через несколько эпох (может быть, 2-5 или около того), в то время как потери от тренировок продолжают уменьшаться. Несут ли потери при проверке большой вес в такого рода проблемах? Цель модели - генерировать новые строки, поэтому количественная оценка потерь при проверке с помощью других строк кажется ... бессмысленной?
Это Мне трудно действительно найти лучшую модель, поскольку качественно я понимаю, что лучшая модель обучается для большего количества эпох, чем требуется для того, чтобы потеря проверки перестала изменяться, но также и для меньшего количества эпох, чем требуется, чтобы потеря обучения начала увеличиваться. Я был бы очень признателен за любые ваши советы по этой проблеме, а также за общие советы по RNN для генерации текста, особенно в отношении отсева и переоснащения. Спасибо!
Это код для подбора модели для каждой эпохи. Обратный вызов - это пользовательский обратный вызов, который просто печатает несколько тестов. Теперь я понимаю, что history_callback.history ['loss'], вероятно, является потерей обучения, не так ли ...
for i in range(num_epochs):
history_callback = model.fit(x, y,
batch_size=128,
epochs=1,
callbacks=[print_callback],
validation_split=0.3)
loss_history.append(history_callback.history['loss'])
validation_loss_history.append(history_callback.history['val_loss'])
Я не собираюсь копировать предложения из данных обучения скорее я хотел бы создать предложение из того же дистрибутива, на котором я тренируюсь.