Найти в Дзене
Властелин машин

Нейросеть под микроскопом

Рассмотрим, из каких кирпичиков состоят нейронные сети и их основные свойства.

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

В библиотеке глубокого обучения TensorFlow (псевдоним tf) большинство высокоуровневых слоев являются подклассами tf.Module. Напишем простой класс из двух переменных, реализующий умножение входа на матрицу и сложение с вектор-строкой:

Метод __call__ - запускается при вызове объекта по имени. Например так:

-2

Для получения переменных слоя можно вызвать свойство variables. При этом существует также возможность извлечения только обучаемых переменных (trainable_variables):

-3
-4

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

-5

В класс MyModule добавлена инициализация переменных, а также задание размеров в соответствии с вводимыми данными (из-за этого их реализация переместилась в метод __call__). В классе TwoLayerModel вызываются слои MyModule, а также функция активации relu.

Аналогично MyModule TwoLayerModel также имеет свойство variables. Кроме того, присутствует свойство submodules, которое содержит информацию о внутренних слоях модели:

-6
-7

-8