Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
ошибочности примерно в 75 % для этой задачи после обучения модели на ~250 000
примеров данных (50 эпох
×
50 батчей в эпохе
×
100 примеров данных в батче).
Моделирование проводилось из расчета пяти карт на руки, но подобная точность
достижима и при другом количестве. Для более высокой степени безошибочности
необходимы б
ó
льшие батчи и большее число эпох, но даже 75 % дают нашему ин
теллектуальному игроку ощутимое преимущество над «наивным» игроком в оценке
вероятности победы.
Рис. 6.1.
UI примера data-generator
Рассмотрим подробнее скриншот. Описание правил игры и кнопка запуска моде
лирования находятся слева вверху. Ниже — сгенерированные признаки и конвейер
обработки данных. Нажатие кнопки
Dataset-to-Array
запускает цепочку операций над
объектом
Dataset
: моделирование игры, генерацию признаков, организацию при
меров данных в батчи, группировку
N
батчей вместе, преобразование их в массив
и вывод этого массива в UI. Справа вверху — все, что нужно для обучения модели
с помощью этого конвейера обработки данных. При нажатии пользователем кнопки
Train-Model-Using-Fit-Dataset
начинает выполняться операция
model.fitDataset()
, из
влекая примеры данных из конвейера. Под этой кнопкой выводятся кривые потерь
и безошибочности. Справа внизу пользователь может ввести значения карт на руках
игрока 1 и нажать кнопку для получения от модели соответствующих предсказаний.
Чем больше предсказанное значение, тем более модель уверена в победе игрока
с такими картами. Выборка значений производится с возвращением в колоду, так
что вполне возможны пять одинаковых карт.
Глава 6. Работа с данными
255
Для выполнения этой операции с помощью
model.fit()
нам бы пришлось соз
дать и хранить гдето тензор, содержащий 250 000 примеров данных, для одного
только представления входных признаков. Данные в этом примере относительно
невелики — всего несколько десятков значений с плавающей точкой на пример
1
— но
для нашей задачи обнаружения объектов из предыдущей главы 250 000 примеров
данных потребовали бы около 150 Гбайт памяти GPU
2
— намного больше доступного
в 2019 году для большинства браузеров объема.
Рассмотрим наиболее интересные части кода. Вопервых, посмотрим на гене
рацию объекта
Dataset
. Код в листинге 6.7 (упрощенный вариант приведенного
в файле
tfjs-examples/data-generator/index.js
) аналогичен генератору объекта
Dataset
для бросания костей из листинга 6.3, но немного сложнее, поскольку мы
сохраняем больше информации.
Листинг 6.7.
Создание объекта tf.data.Dataset для карточной игры
1
До 2019 года в JavaScript и целые, и дробные числа представлялись c помощью примитивного
типа Number. Number, по сути, был числом с плавающей запятой. В 2019 году был предложен
тип данных BigInt, который предназначен только для целых чисел. Возможно, в момент на
писания книги авторы еще не смогли перенять это новшество. —
Примеч. науч. ред.
2
числоПримеров
×
ширинаИзображения
×
высотаИзображения
×
глубинаЦвета
×
раз
мерInt32 = 250 000
×
224
×
224
×
3
×
4 байт.
256
Do'stlaringiz bilan baham: |