Что делает Керас, если размер моей выборки меньше размера партии?

Довольно новичок в LSTM, но я уже искал решение и не нашел ничего удовлетворительного или даже достаточно похожего.

Итак, вот моя проблема: я занимаюсь классификацией сна и аннотировал записи примерно для 6 тысяч пациентов. Чтобы обучить свой двунаправленный LSTM, я выбираю одного пациента и подгоняю модель к этим данным вместо того, чтобы помещать все данные от всех пациентов в одну большую матрицу, потому что я хочу предотвратить смешивание образцов пациентов, когда Керас тренируется с мини-партиями. Длина последовательности илиsamples_sizeна пациента не то же самое. Затем я перебираю всех пациентов и делаю дополнительный цикл для количества эпох, которые я считал для обучения модели (как описано в Руководствах для разработчиков).
Итак, поскольку LSTM (если не с отслеживанием состояния) сбрасывают свою ячейку и скрытое состояние после каждого пакета и по умолчаниюbatch_size за tf.keras.Sequential.fit() 32 года Я хотел, чтобы он соответствовал sample_sizeпациента я показываю в сети. Если я это сделаю, то через некоторое время получаю предупреждение и ошибки тренировочного процесса. Ошибка:

ПРЕДУПРЕЖДЕНИЕ: тензорный поток:6 из последних 11 вызовов.distributed_function по адресу 0x0000023F9D517708> запустили повторное отслеживание tf.function. Трассировка стоит дорого, и чрезмерное количество трассировок, вероятно, связано с передачей объектов python вместо тензоров. Кроме того, tf.function имеет параметр экспериментальной_relax_shapes=True, который смягчает формы аргументов, чтобы избежать ненужного повторения. Пожалуйста, обратитесь к https://www.tensorflow.org/beta/tutorials/eager/tf_function и https://www.tensorflow.org/api_docs/python/tf/function для получения дополнительных сведений.

Итак, я посмотрел, что у меня самое длинное sample_size это и установил мой batch_size соответственно.


tl; dr: Что делает Керас во всех случаях, когда моя переменнаяsample_size не соответствует моему batch_size=max(len(sample_size))?

  1. Это просто показывает доступные образцы в сети?
    • Если да, то почему появляется упомянутое выше предупреждение о настройке batch_size=sample_size приводит к неудачному обучению?
  2. Или он показывает доступные образцы в сети и заполняет остальные нулями, чтобы они соответствовали заданным batch_size?
    • Если да: почему существует необходимость в маскировке, например, при использовании режима с отслеживанием состояния?

edit: Итак, я попробовал несколько дополнительных обходных путей и построил свой собственный генератор данных, который проверяет данные одного пациента как одну партию. Затем я установилsteps_per_epoch=len(train_patients)объединить всех пациентов в одну эпоху. Никаких предупреждений о ретрассировании, которых я тоже не понимаю.
Кажется, это решает мою проблему отображения одного пациента в партии без смешивания данных пациентов и наличия переменнойsample_size, но я действительно не понимаю различий между всеми этими возможностями и их разными предупреждениями.

0 ответов

Другие вопросы по тегам