Глава 8. Недообучение, переобучение и универсальный процесс ML
321
охватывали несколько моментов времени — ни измерения размеров цветов в задаче
irisflower, ни значения 28
×
28 пикселов изображения MNIST
1
.
Можно сказать, сейчас вы в первый раз в книге встретились с последовательными
входными данными. В следующей главе мы более подробно обсудим вопрос созда
ния в TensorFlow.js специализированных моделей (RNN) для последовательных
данных, обладающих более широкими возможностями. Но здесь воспользуемся
для поставленной задачи двумя уже известными вам типами моделей: линейными
регрессорами и многослойными перцептронами. Таким образом мы сформируем
фундамент для изучения RNN и получим точку отсчета для сравнения с более про
двинутыми моделями.
Сам код, выполняющий показанный на рис. 8.1 процесс генерации данных,
находится в файле
jena-weather/data.js
, в функции
getNextBatchFunction()
.
Она интересна тем, что возвращает объект с функцией
next()
вместо конкретного
значения. Функция
next()
при вызове возвращает фактические значения данных.
А содержащий функцию
next()
объект называется
итератором
. Зачем использовать
подобный обходной путь вместо написания непосредственно итератора? Вопервых,
это соответствует спецификации «генератор/итератор» языка JavaScript
2
. Вскоре
мы передадим его в API
tf.data.generator()
, чтобы создать объект
Dataset
для об
учения модели. А этот API требует именно такой сигнатуры функции. Вовторых,
нам нужна возможность задавать настройки итератора; а возвращающая итератор
функция — отличное средство, позволяющее задавать конфигурации.
Возможные опции конфигурации видны из сигнатуры функции
getNextBatchFun-
ction()
:
getNextBatchFunction(
shuffle, lookBack, delay, batchSize, step, minIndex, maxIndex,
normalize,
includeDateTime)
Как видим, параметров настройки здесь немало. Например, с помощью аргумента
lookBack
можно задавать длительность анализируемого периода при прогнозе по
годы. А аргумент
delay
позволяет указать, насколько далеко в будущее простирается
этот прогноз. Аргументы
minIndex
и
maxIndex
позволяют задавать диапазон строк,
из которых выбираются данные, и т. д.
Передавая функцию
getNextBatchFunction()
функции
tf.data.generator()
, мы
преобразуем ее в объект
tf.data.Dataset
. Как мы упоминали в главе 6, совместное
использование объекта
tf.data.Dataset
с методом
fitDataset()
объекта
tf.Model
дает возможность обучать модель даже в случае, когда данные не помещаются цели
ком в память WebGL (или любой другой подходящий тип памяти). Объект
Dataset
создает батч обучающих данных в GPU лишь непосредственно перед обучением.
1
На самом деле в задаче распознавания голосовых команд в главе 4 присутствовала после
довательность событий, а именно последовательные кадры аудиоспектра, составляющие
спектрограмму. Впрочем, мы рассматривали спектрограмму в целом как изображение,
игнорируя временн
ó
е измерение данной задачи и работая с ним как с пространственным.
2
См. вебдокументацию MDN, раздел Iterators and Generators («Итераторы и генераторы»):
http://mng.bz/RPWK.
322
Do'stlaringiz bilan baham: |