На прошлой неделе я написал статью об использовании классификации CNN для классификации изображений жестов рук Камень, Бумага или Ножницы, которая была построена на платформе pyTorch Framework с использованием пакета под названием «torchvision».

Видеть:



для статьи, и:



для соответствующего кода.

Я хотел воспроизвести тот же классификатор в Keras, чтобы увидеть сравнительную простоту использования и функций. Вкратце: Keras и его пакеты казались чертовски проще в использовании, чем Torch. Вот сравнение этапов использования фреймворка глубокого обучения над загрузкой данных, сетевой архитектурой и обучением.

  1. Загрузка набора изображений:

Оба пакета выполняют тяжелую работу по простому извлечению всех изображений из сохраненных папок и добавлению их в загрузчик данных, который поступает в вашу сеть. Предпосылка того, как вы храните изображения в отдельных подпапках («Камень», «Бумага» или «Ножницы») в папке с данными, а пакет загрузчика считывает соответствующие изображения и метки на основе имени подпапки.

Давайте посмотрим на различия

Керас:

и Факел:

Если вы сразу думаете, что ImageDataGenerator Кераса кажется намного более удобным для пользователя с более аккуратной презентацией, вы на месте. Он управляет изменением размера изображения интуитивно понятным образом с помощью целевой тензорной формы. С другой стороны, Torch использует такие термины, как «CentreCrop» и «Resize», чтобы относиться к высоте и ширине отдельно.

2. Архитектура нейронной сети

Keras в качестве обертки делает много тяжелой работы над серверной частью Tensorflow. Причина, по которой его популярность выросла из-за его последовательных функций, когда вы можете добавлять свои входные, скрытые и выходные слои «поэтапно».

Я перестроил ту же модель CNN, используя примерно ту же архитектуру (единственным исключением был процент отсева).

Скрипт Keras:

vs Факел:

Torch требует, чтобы вы построили реальный класс со всеми слоями и соответствующими выходами для каждого связанного слоя. Это здорово с точки зрения того, что заставляет пользователей адаптироваться к целостному мышлению об архитектуре нейронной сети, это требует немного усилий и поиска ответов.

Один наглядный пример - в финальном выводе позже между Keras и Torch:

В Keras мы просто используем функцию softmax, чтобы получить числовой класс, полученный моделью для трех классов: {‘paper’: 0, ‘rock’: 1, ‘scissors’: 2}.

В Torch, с другой стороны, мы используем, чтобы позже манипулировать окончательным выводом для функции softmax 'like' через out = out.view (out.size (0), - 1), прежде чем передавать его в линейную функцию с тензором size и 3 out_channels. Смущенный? и я тоже! Вы могли подумать, что Torch автоматически изменит форму тензоров в их функциях conv2, но, увы, это не так.

3. Обучение:

Keras использует стандартную функцию model.fit, знакомую со многими моделями машинного обучения:

Так просто, чисто и элегантно, без лишних хлопот.

Где как в Факел:

Вы буквально должны объявить петли, необходимые для питания сети, очистки градиентов, расчета потерь, шагов обучения и проверки точности. Если вам нравится гибкость в назначении собственных шагов обучения и проверочных пакетов, а также удобство работы с циклами, Torch определенно для вас.

Мысли об обоих пакетах

Честно говоря, я создал эту модель Кераса, обучил и запустил ее за 20 с лишним минут. Для сравнения, Torch требовал использования онлайн-материалов и курсов для устранения проблем с этапами, в частности, для управления выходными тензорами в отношении форм для последнего слоя считывания. Torch также имеет довольно неинтуитивный словарный запас для изменения размеров изображений, что требует экспериментов после прочтения документации.

Однако Torch заставляет пользователей задуматься о корне всех моделей глубокого обучения: тензорах. Всегда нужно думать о форме тензора, входных слоях, о том, как будут выглядеть последующие выходные данные, и о выражении, которое даст модель.

Если бы у Torch был способ выполнить мини-вывод тензорной формы или способ предварительного просмотра вывода между подключенными слоями, я думаю, что пользователям было бы больше поощрения попробовать свои силы в работе с torch.

Лучший способ описать факел - это как если бы вы играли в игры From Soft, такие как Darksouls или Sekiro:

… Или читая Ницше и Делёза.

Когда вы пытаетесь понять механику вещей, это может расстраивать, но удовлетворение от того, что ваша модель, наконец, начинает прямую связь и обучающие шаги, выходит за рамки катарсиса.

Я порекомендую сначала попробовать свои силы в Torch, используя онлайн-курсы, чтобы получить все основы, а затем создать рабочую версию с помощью Keras.

На сегодняшний день я видел бесчисленное количество вариантов обучающих шагов, которые, как программисту, прекрасно учатся и генерируют идеи. Поскольку Keras делает за вас тяжелую работу в оболочке, гибкости в адаптации кода для вашего собственного выражения может не быть.

Если вы хотите увидеть код версии CNN для Кераса, см.