TG Telegram Group & Channel
Новое электричество | United States America (US)
Create: Update:

PyTorch: строим модель

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

Сегодня поговорим о том как собственно строятся нейронные сети на PyTorch. Ведь перед тем, как модель обучить, нужно ее составить.

Любая нейронная сеть состоит из набора слоев, через которые будет проходить каждый кусок данных (батч). В PyTorch собраны готовые классы для очень многих видов слоев. Рассмотрим на примере, как это работает. Приведем пример слоев для простой модели классификации с одним скрытым слоем и тремя классами, в которые классифицируются объекты:

(1) Linear (in_features = 100, out_features = 10) #линейный слой, который берет на входе начальные данные, состоящие из 100 параметров (векторы, длиной 100) и выдает на выходе 10 параметров (векторы длиной 10);
(2) ReLU() #активационная функция. Ее смысл в том, что она преобразует линейные данные в нелинейную зависимость. За счет этого модель можно оптимизировать с помощью дифференциального исчисления (градиентный спуск и другие схожие методы);

(3) Linear(in_features = 10, out_features = 3) #линейный слой, берущий на входе 10 параметров и отдающий 3. 10 параметров были получены из первого слоя и преобразованы активационной функцией;
(4) ReLU() #новая активационная функция;
(5) Softmax() #финальный классифицирующий слой. На входе получает 3 величины, означающие "оценки" каждого класса и на основании них считает вероятности попаданий в каждый класс (если оценки классов 6, 5 и 4, то вероятности попадания в классы будут 67%, 24% и 9% соответственно; так обычно намного точней, чем считать, что наблюдение всегда попадает в 1й класс).

Мы описали начинку нашей модели, как же теперь объяснить системе, как её "склеить"? В PyTorch есть крайне удобный инструмент nn.Sequential. Его можно задать как последовательность слоев (nn.Sequential(layer1, layer2, ...)и не придется делать ничего больше - система сама поймет, как данные будут проходить слои. Это правда очень удобно!

Альтернативный, чуть более сложный способ, использовать nn.Module. В этом случае помимо создания слоев придется самому расписывать метод forward - основной метод, определяющий как кусочки данных будут проходить по модели.

В общем, составить модель в PyTorch совсем несложно! Другое дело, составить "правильную" модель, максимально подходящую под задачу - здесь потребуется мастерство, опыт, а также часто большое количество проб и ошибок. Хорошая новость в том, что благодаря удобству пакета, эксперименты в PyTorch можно проводить быстро!

PyTorch: строим модель

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

Сегодня поговорим о том как собственно строятся нейронные сети на PyTorch. Ведь перед тем, как модель обучить, нужно ее составить.

Любая нейронная сеть состоит из набора слоев, через которые будет проходить каждый кусок данных (батч). В PyTorch собраны готовые классы для очень многих видов слоев. Рассмотрим на примере, как это работает. Приведем пример слоев для простой модели классификации с одним скрытым слоем и тремя классами, в которые классифицируются объекты:

(1) Linear (in_features = 100, out_features = 10) #линейный слой, который берет на входе начальные данные, состоящие из 100 параметров (векторы, длиной 100) и выдает на выходе 10 параметров (векторы длиной 10);
(2) ReLU() #активационная функция. Ее смысл в том, что она преобразует линейные данные в нелинейную зависимость. За счет этого модель можно оптимизировать с помощью дифференциального исчисления (градиентный спуск и другие схожие методы);

(3) Linear(in_features = 10, out_features = 3) #линейный слой, берущий на входе 10 параметров и отдающий 3. 10 параметров были получены из первого слоя и преобразованы активационной функцией;
(4) ReLU() #новая активационная функция;
(5) Softmax() #финальный классифицирующий слой. На входе получает 3 величины, означающие "оценки" каждого класса и на основании них считает вероятности попаданий в каждый класс (если оценки классов 6, 5 и 4, то вероятности попадания в классы будут 67%, 24% и 9% соответственно; так обычно намного точней, чем считать, что наблюдение всегда попадает в 1й класс).

Мы описали начинку нашей модели, как же теперь объяснить системе, как её "склеить"? В PyTorch есть крайне удобный инструмент nn.Sequential. Его можно задать как последовательность слоев (nn.Sequential(layer1, layer2, ...)и не придется делать ничего больше - система сама поймет, как данные будут проходить слои. Это правда очень удобно!

Альтернативный, чуть более сложный способ, использовать nn.Module. В этом случае помимо создания слоев придется самому расписывать метод forward - основной метод, определяющий как кусочки данных будут проходить по модели.

В общем, составить модель в PyTorch совсем несложно! Другое дело, составить "правильную" модель, максимально подходящую под задачу - здесь потребуется мастерство, опыт, а также часто большое количество проб и ошибок. Хорошая новость в том, что благодаря удобству пакета, эксперименты в PyTorch можно проводить быстро!


>>Click here to continue<<

Новое электричество




Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)