Что делает Керас, если размер моей выборки меньше размера партии?
Довольно новичок в 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))
?
- Это просто показывает доступные образцы в сети?
- Если да, то почему появляется упомянутое выше предупреждение о настройке
batch_size=sample_size
приводит к неудачному обучению?
- Если да, то почему появляется упомянутое выше предупреждение о настройке
- Или он показывает доступные образцы в сети и заполняет остальные нулями, чтобы они соответствовали заданным
batch_size
?- Если да: почему существует необходимость в маскировке, например, при использовании режима с отслеживанием состояния?
edit: Итак, я попробовал несколько дополнительных обходных путей и построил свой собственный генератор данных, который проверяет данные одного пациента как одну партию. Затем я установилsteps_per_epoch=len(train_patients)
объединить всех пациентов в одну эпоху. Никаких предупреждений о ретрассировании, которых я тоже не понимаю.
Кажется, это решает мою проблему отображения одного пациента в партии без смешивания данных пациентов и наличия переменнойsample_size
, но я действительно не понимаю различий между всеми этими возможностями и их разными предупреждениями.