Содержание статьи
Делаем модель нейросети для распознавания рукописных цифр
Вложенные модели
Здесь y_true, y_pred – это наборы one-hot векторов размером мини-батча, то есть, функция будет применяться сразу к набору данных, а не к одному конкретному наблюдению. Так как на выходе нам нужно получить одно конкретное число, то все значения для каждого наблюдения из мини-батча мы усредняем функцией reduce_mean().
Смотрите, здесь у конструктора был добавлен еще один параметр activate, определяющий тип функции активации слоя нейронов (по умолчанию ReLu). А в магическом методе __call__ мы применяем к суммам либо relu(), либо softmax(), либо используется линейная функция (то есть, выходы передаются как есть). Во всем остальном этот такой жекласс, как и в предыдущем занятии.
Google Lens — это приложение для визуальных запросов. Например, вы наводите камеру телефона на интересующий вас объект и получаете информацию о нем из Гугла. Приложение также умеет обрабатывать текст, на который вы наведете камеру. Например, переводить его. А теперь еще и умеет прочитать вслух. Но самая крутая новая фича — распознавание рукописного текста. Да, пока она работает только на английском и только если почерк нормальный, но это уже большой шаг вперед. А если вы используете браузер Chrome на компьютере, то распознанный текст можно одним кликом вставить с телефона в документ Google Docs на компьютере.
Далее, вычисляем градиенты относительно кросс-энтропии для параметров наших слоев, то есть, для весовых коэффициентов и изменяем их с помощью метода apply_gradients() сначала для параметров первого слоя, а затем, для второго. В результате, на каждой эпохе у нас функция потерь должна уменьшаться.
Первый цикл проходим по эпохам, а второй перебирает мини-батчи размером BATCH_SIZE из случайных наблюдений всей обучающей выборки. Я решил мини-батчи сформировать именно так. В каждой конкретной реализации процесса обучения эти выборки можно создавать разным образом, все зависит от поставленной задачи и представлений разработчика о правильности процесса обучения.
Специалисты Сибирского федерального университета и Санкт-Петербургского государственного электротехнического университета «ЛЭТИ» разработали нейросеть, которая распознает рукописный текст на русском языке. Речь идет о так называемой свёрточной нейросети (CNN). Она способна читать рукопись на русском языке с точностью до 99%, утверждают разработчики. По их словам, алгоритм ориентируется независимо от почерка, защищён от утечки информации и не требует подключения к интернету. Обучение нейросети проводилось с помощью предварительно обработанных данных хранилища CoMNIST — известной базы данных, содержащей образцы рукописного написания букв на латинице и кириллице. Первым делом учёные создали новый набор данных с помеченным изображением для 33 букв русского алфавита, затем разработали новую архитектуру CNN для обнаружения рукописных букв и сравнили её с уже существующими моделями. После этого выложили на Github полное описание свёрточной нейросети и исходного кода, чтобы другие исследователи имели возможность воспроизводить эти данные.
Видео по теме
Далее разместим еще один слой из 10 выходных нейронов с функцией активации softmax. Полученный выходной вектор как раз и будет содержать класс предъявленного изображения. Например, если был изображен 0, то выход y1 должен принимать наибольшее значение; если 1, то максимальный выход – это y2 и так далее.
Здесь коллекция trainable_variables формируется автоматически из тех переменных тензоров (tf.Variable), которые присутствуют в слоях. Таким образом, мы переходим на более высокий уровень абстракции и, как следствие, получаем большую гибкость программы и удобство ее использования.Мало того, у моделиSequentialModule имеется свойствоsubmodules, которое содержит список вложенных моделей:
И давайте, еще раз, внимательно посмотрим, что же у нас в итоге получилось. Во-первых, мы обучили НС в соответствии с алгоритмом обратного распространения ошибки (backpropagation). Но откуда он здесь взялся? Мы же его явно нигде не прописывали?В этом и заключается «магия» работы вычислительного графа. С его помощью мы вычислили частные производные по всем параметрам первого и второго слоев НС относительно функции кросс-энтропии, а затем, эти градиенты были использованы в алгоритме градиентного спуска с заданным оптимизатором. Видите, как легко и просто реализуются алгоритмы машинного обучения через вычислительный граф в Tensorflow.
Машинное обучение позволяет создать нейросети, которые умеют распознавать рукописный текст. Как правило, речь идет о распознавании текста в бумажных формах с квадратиками для букв. Таким образом, рукописного текста сводится к распознаванию отдельных букв. Примеры использования распознавания рукописного текста для бизнеса — даны ниже.
Фактически, нам осталось обучить эту НС, то есть, найти значения параметров весовых коэффициентов с помощью алгоритма градиентного спуска. Как мы уже хорошо себе представляем, для этого вначале нужно задать функцию потерь. В задачах классификации (с числом классов более 2) хорошо себя зарекомендовала категориальная кросс-энтропия. В пакете Tensorflow она уже встроена и нам достаточно описать порядок ее вызова. Сделаемэто, следующимобразом:
Samsung представила смартфоны Galaxy Note 10 с 6,3-дюймовым дисплеем и Galaxy Note 10+ c экраном 6,8 дюйма. Смартфоны поддерживают стандарты связи 5G и LTE. Оба устройства получили электронное перо S Pen. Оно позволяет преобразовывать рукописный текст в заметки и дистанционно управлять смартфоном с помощью жестов. Оба устройства получили модуль из трёх камер: основной на 12 мегапикселей, телеобъектив на 12 мегапикселей и широкоугольной на 16 мегапикселей. Galaxy Note 10+ также оснащён 3D-сканером объектов, позволяющим копировать объекты для 3D-принтеров или создания трёхмерных видео. В России Galaxy Note 10 будет стоить от 76 900 рублей, Galaxy Note 10+ — от 89 990 рублей.