Что делает Керас, если размер моей выборки меньше размера партии? - PullRequest
1 голос
/ 17 июня 2020

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

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

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

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


tl; dr: Что делает Keras во всех случаях, когда моя переменная 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, но я действительно не понимаю различий между всеми этими возможностями и их различными предупреждениями.

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