На прошлой неделе я написал статью об использовании классификации CNN для классификации изображений жестов рук Камень, Бумага или Ножницы, которая была построена на платформе pyTorch Framework с использованием пакета под названием «torchvision».
Видеть:
для статьи, и:
для соответствующего кода.
Я хотел воспроизвести тот же классификатор в Keras, чтобы увидеть сравнительную простоту использования и функций. Вкратце: Keras и его пакеты казались чертовски проще в использовании, чем Torch. Вот сравнение этапов использования фреймворка глубокого обучения над загрузкой данных, сетевой архитектурой и обучением.
- Загрузка набора изображений:
Оба пакета выполняют тяжелую работу по простому извлечению всех изображений из сохраненных папок и добавлению их в загрузчик данных, который поступает в вашу сеть. Предпосылка того, как вы храните изображения в отдельных подпапках («Камень», «Бумага» или «Ножницы») в папке с данными, а пакет загрузчика считывает соответствующие изображения и метки на основе имени подпапки.
Давайте посмотрим на различия
Керас:
и Факел:
Если вы сразу думаете, что 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 для Кераса, см.