РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
253 of 824 menu

Класс Layer

Класс Layer - это фундаментальный строительный блок для создания нейронных сетей в TensorFlow. Все слои, такие как Dense, Conv2D или Embedding, наследуются от этого класса. Он отвечает за создание и хранение весов, отслеживание потерь и метрик, а также за вызов вычислений на входных данных. При создании собственного слоя необходимо наследоваться от Layer и реализовать метод call, в котором описывается логика прямого прохода. Метод build используется для создания весов на основе формы входных данных. Параметры trainable, name и dtype задают основные свойства слоя при инициализации.

Синтаксис

tf.keras.layers.Layer(trainable=True, name=None, dtype=None, **kwargs)

Пример

Давайте создадим простой пользовательский слой, который умножает входные данные на обучаемый скаляр:

import tensorflow as tf class MyLayer(tf.keras.layers.Layer): def __init__(self, **kwargs): super().__init__(**kwargs) self.multiplier = None def build(self, input_shape): self.multiplier = self.add_weight( name="multiplier", shape=(), initializer="ones", trainable=True ) def call(self, inputs): return inputs * self.multiplier layer = MyLayer(name="my_layer") t = tf.constant([1, 2, 3, 4, 5], dtype=tf.float32) res = layer(t) print(res)

Результат выполнения кода:

tf.Tensor([1. 2. 3. 4. 5.], shape=(5,), dtype=float32)

Пример

Давайте проверим атрибуты созданного слоя - имя, наличие весов и признак обучаемости:

import tensorflow as tf class MyLayer(tf.keras.layers.Layer): def __init__(self, **kwargs): super().__init__(**kwargs) self.multiplier = None def build(self, input_shape): self.multiplier = self.add_weight( name="multiplier", shape=(), initializer="ones", trainable=True ) def call(self, inputs): return inputs * self.multiplier layer = MyLayer(name="my_layer") t = tf.constant([1, 2, 3, 4, 5], dtype=tf.float32) res = layer(t) print(layer.name) print(layer.trainable) print(len(layer.weights))

Результат выполнения кода:

"my_layer" True 1

Пример

Давайте создадим слой с замороженными (необучаемыми) весами:

import tensorflow as tf class FrozenLayer(tf.keras.layers.Layer): def __init__(self, **kwargs): super().__init__(**kwargs) self.scale = None def build(self, input_shape): self.scale = self.add_weight( name="scale", shape=(), initializer="ones", trainable=False ) def call(self, inputs): return inputs * self.scale layer = FrozenLayer(name="frozen_layer") t = tf.constant([1, 2, 3, 4, 5], dtype=tf.float32) res = layer(t) print(layer.trainable) print(len(layer.trainable_weights)) print(len(layer.non_trainable_weights))

Результат выполнения кода:

True 0 1

Смотрите также

  • метод call,
    который описывает логику прямого прохода слоя
  • метод build,
    который создает веса слоя на основе формы входа
  • метод add_weight,
    который добавляет обучаемый вес в слой
  • атрибут trainable_weights,
    который хранит список обучаемых весов слоя
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить