Spec-Zone.ru › TensorFlow 1.15

tf.keras.layers.Layer

Просмотреть исходный код на GitHub

Базовый класс слоя.

Наследуется от: Module

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.keras.layers.Layer, `tf.compat.v2.keras.layers.Layer`

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

Это класс, от которого наследуются все слои.

Слой — это класс, реализующий общие операции нейронных сетей, такие как свёртка, батч-нормализация и т. д. Эти операции требуют управления весами, потерями, обновлениями и межслойными связями.

Пользователи просто создают слой, а затем используют его как вызываемую функцию.

Мы рекомендуем потомкам Layer реализовать следующие методы:

  • __init__(): Сохранение конфигурации в переменных члена
  • build(): Вызывается один раз из __call__, когда нам известны формы входных данных и dtype. Должен содержать вызовы add_weight(), а затем вызывать метод суперкласса build() (который устанавливает self.built = True, что удобно, если пользователь хочет вызвать build() вручную перед первым вызовом __call__).
  • call(): Вызывается в __call__ после проверки того, что build() был вызван один раз. Должен фактически выполнять логику применения слоя к тензорам входных данных (которые должны передаваться в качестве первого аргумента).
Аргументы
trainable Булево значение, указывающее, должны ли переменные слоя быть обучимыми.
name Имя слоя в виде строки.
dtype Тип данных вычислений и весов слоя (по умолчанию None означает использование tf.keras.backend.floatx в TensorFlow 2 или типа первого входного тензора в TensorFlow 1).
dynamic Установите это значение в True, если ваш слой должен выполняться только в режиме eager и не должен использоваться для генерации статического вычислительного графа. Это будет справедливо для Tree-RNN или рекурсивной сети, например, или в общем для любого слоя, который манипулирует тензорами с помощью потоков управления Python. Если False, мы предполагаем, что слой можно безопасно использовать для генерации статического вычислительного графа.

Только для чтения свойства: name: Имя слоя (строка). dtype: Тип данных вычислений и весов слоя. Если используется смешанная точность с tf.keras.mixed_precision.experimental.Policy, это вместо этого просто тип данных весов слоя, так как вычисления выполняются в другом типе данных. updates: Список обновляющих операций этого слоя. losses: Список потерь, добавленных этим слоем. trainable_weights: Список переменных, которые должны включаться в обратное распространение. non_trainable_weights: Список переменных, которые не должны включаться в обратное распространение. weights: Конкатенация списков trainable_weights и non_trainable_weights (в этом порядке).

Изменяемые свойства:

  • trainable: Должен ли слой обучаться (булево значение).
  • input_spec: Необязательный(ые) объект(ы) constraints, определяющий ограничения на входные данные, которые может принять слой.

Типы данных и приведение типов

Каждый слой имеет тип данных, который обычно является типом данных вычислений и переменных слоя. Тип данных слоя можно запросить через свойство Layer.dtype. Тип данных задаётся аргументом конструктора dtype. В TensorFlow 2 тип данных по умолчанию — tf.keras.backend.floatx(), если тип данных не указан. floatx() сам по себе по умолчанию равен "float32". Кроме того, слои будут приводить входные данные к типу данных слоя в TensorFlow 2. Например:

x = tf.ones((4, 4, 4, 4), dtype='float64')
layer = tf.keras.layers.Conv2D(filters=4, kernel_size=2)
print(layer.dtype)  # float32

# `layer` casts it's inputs to layer.dtype, which is float32, and does
# computations in float32.
y = layer(x)

В настоящее время приведение типов выполняется только для тензоров в первом аргументе метода call слоя. Например:

class MyLayer(tf.keras.layers.Layer):
  # Bug! `b` will not be casted.
  def call(self, a, b):
    return a + 1., b + 1.

a = tf.constant(1., dtype="float32")
b = tf.constant(1., dtype="float32")

layer = MyLayer(dtype="float64")
x, y = layer(a, b)
print(x.dtype)  # float64
print(y.dtype)  # float32. Not casted since `b` was not passed to first input

Рекомендуется принимать тензоры только в первом аргументе. Таким образом, все тензоры приводятся к типу данных слоя. MyLayer следовательно, должно быть написано так:

class MyLayer(tf.keras.layers.Layer):
  # Now, all tensor inputs will be casted.
  def call(self, inputs):
    a, b = inputs
    return a + 1., b + 1.

a = tf.constant(1., dtype="float32")
b = tf.constant(1., dtype="float32")

layer = MyLayer(dtype="float64")
x, y = layer((a, b))
print(x.dtype)  # float64
print(y.dtype)  # float64.

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

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

Подкласс слоя может предотвратить автоматическое приведение входных данных, передав autocast=False конструктору слоя. Например:

class MyLayer(tf.keras.layers.Layer):

  def __init__(self, **kwargs):
    kwargs['autocast']=False
    super(MyLayer, self).__init__(**kwargs)

  def call(self, inp):
    return inp

x = tf.ones((4, 4, 4, 4), dtype='float64')
layer = MyLayer()
print(layer.dtype)  # float32.
y = layer(x)  # MyLayer will not cast inputs to it's dtype of float32
print(y.dtype)  # float64

Запуск моделей в float64 в TensorFlow 2

Если вы хотите запустить модель в float64, вы можете установить floatx в float64, вызвав tf.keras.backend.set_floatx('float64'). Это заставит все слои использовать float64 по умолчанию вместо float32:

tf.keras.backend.set_floatx('float64')
layer1 = tf.keras.layers.Dense(4)
layer2 = tf.keras.layers.Dense(4)

x = tf.ones((4, 4))
y = layer2(layer1(x))  # Both layers run in float64

В качестве альтернативы вы можете передать dtype='float64' каждому отдельному слою. Обратите внимание, что если у вас есть слои, которые содержат другие слои в качестве элементов, вы должны убедиться, что каждый дочерний слой получает dtype='float64' также в конструктор:

layer1 = tf.keras.layers.Dense(4, dtype='float64')
layer2 = tf.keras.layers.Dense(4, dtype='float64')

x = tf.ones((4, 4))
y = layer2(layer1(x))  # Both layers run in float64

class NestedLayer(tf.keras.layers.Layer):
  def __init__(self, **kwargs):
    super(NestedLayer, self).__init__(**kwargs)
    self.dense = tf.keras.layers.Dense(4, dtype=kwargs.get('dtype'))

  def call(self, inp):
    return self.dense(inp)

layer3 = NestedLayer(dtype='float64')
z = layer3(x)  # layer3's dense layer runs in float64, since NestedLayer
               # correcty passed it's dtype to it's dense layer

Атрибуты
activity_regularizer Необязательная функция регуляризации для вывода этого слоя.
dtype
dynamic
input Получает тензор(ы) входных данных слоя.

Применимо только если у слоя ровно один вход, т.е. если он подключен к одному входящему слою.

input_mask Получает тензор(ы) маски входных данных слоя.

Применимо только если у слоя ровно один входной узел, т.е. если он подключен к одному входящему слою.

input_shape Получает форму(ы) входных данных слоя.

Применимо только если у слоя ровно один вход, т.е. если он подключен к одному входящему слою, или если все входы имеют одинаковую форму.

input_spec
losses Потери, связанные с этим Layer.

Тензоры регуляризации переменных создаются при доступе к этому свойству, поэтому он безопасен в eager режиме: доступ к losses в tf.GradientTape будет распространять градиенты обратно на соответствующие переменные.

metrics
name Возвращает имя модуля, переданное или определенное в конструкторе.
Примечание: Это не то же самое, что self.name_scope.name, которое включает имена родительских модулей.
non_trainable_variables
non_trainable_weights
output Получает тензор(ы) выходных данных слоя.

Применимо только если у слоя ровно один выход, т.е. если он подключен к одному входящему слою.

output_mask Получает тензор(ы) маски выходных данных слоя.

Применимо только если у слоя ровно один входной узел, т.е. если он подключен к одному входящему слою.

output_shape Получает форму(ы) выходных данных слоя.

Применимо только если у слоя один выход, или если все выходы имеют одинаковую форму.

trainable
trainable_variables Последовательность переменных, принадлежащих этому модулю и его подмодулям.
Примечание: Этот метод использует рефлексию для поиска переменных на текущем экземпляре и подмодулях. По соображениям производительности, вы можете кэшировать результат вызова этого метода, если не ожидаете, что возвращаемое значение изменится.
trainable_weights
updates
variables Возвращает список всех переменных/весов слоя.

Псевдоним self.weights.

weights Возвращает список всех переменных/весов слоя.

Методы

add_loss

Просмотреть исходный код

add_loss(
    losses, inputs=None
)

Добавление тензора(ов) потерь, потенциально зависящих от входных данных слоя.

Некоторые потери (например, потери регуляризации активности) могут зависеть от входных данных, переданных при вызове слоя. Поэтому при повторном использовании одного и того же слоя на разных входных данных a и b, некоторые записи в layer.losses могут зависеть от a, а некоторые — от b. Этот метод автоматически отслеживает зависимости.

Этот метод можно использовать внутри подклассированного слоя или функции модели call, в этом случае losses должен быть тензором или списком тензоров.

Пример:

class MyLayer(tf.keras.layers.Layer):
  def call(inputs, self):
    self.add_loss(tf.abs(tf.reduce_mean(inputs)), inputs=True)
    return inputs

Этот метод также можно вызвать непосредственно на модели Functional Model во время её создания. В этом случае любые тензоры потерь, переданные этой модели, должны быть символическими и должны иметь возможность прослеживаться обратно до тензоров Input модели. Эти потери становятся частью топологии модели и отслеживаются в get_config.

Пример:

inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Actvity regularization.
model.add_loss(tf.abs(tf.reduce_mean(x)))

Если это не так для ваших потерь (если, например, ваши потери ссылаются на Variable одного из слоёв модели), вы можете обернуть свои потери в лямбда-функцию без аргументов. Эти потери не отслеживаются как часть топологии модели, поскольку они не могут быть сериализованы.

Пример:

inputs = tf.keras.Input(shape=(10,))
x = tf.keras.layers.Dense(10)(inputs)
outputs = tf.keras.layers.Dense(1)(x)
model = tf.keras.Model(inputs, outputs)
# Weight regularization.
model.add_loss(lambda: tf.reduce_mean(x.kernel))

Метод get_losses_for позволяет извлечь потери, относящиеся к определённому набору входных данных.

Аргументы
losses Тензор потерь или список/кортеж тензоров. Вместо тензоров, потери также могут быть нуль-аргументными вызовами, которые создают тензор потерь.
inputs Игнорируется при выполнении в режиме eager. Если передано значение отличное от None, это указывает, что потери зависят от некоторых входных данных слоя, и поэтому они должны выполняться только там, где эти входы доступны. Это относится, например, к потерям регуляризации активности. Если передано None, потери считаются безусловными и будут применяться ко всем потокам данных слоя (например, потери регуляризации весов).

add_metric

Просмотреть исходный код

add_metric(
    value, aggregation=None, name=None
)

Добавляет тензор метрики в слой.

Аргументы
value Тензор метрики.
aggregation Функция редукции метрики на уровне образца. Если aggregation=None, это указывает, что предоставленный тензор метрики уже был агрегирован. Например, bin_acc = BinaryAccuracy(name='acc') за которым следует model.add_metric(bin_acc(y_true, y_pred)). Если aggregation='mean', предоставленный тензор метрики будет уменьшен на уровне образца с использованием функции mean. Например, model.add_metric(tf.reduce_sum(outputs), name='output_mean', aggregation='mean').
name Имя метрики (строка).
Исключения
ValueError Если aggregation имеет значение отличное от None или mean.

add_update

Просмотреть исходный код

add_update(
    updates, inputs=None
)

Добавляет операцию(и) обновления, потенциально зависящую(ие) от входных данных слоя. (устаревшие аргументы)

Предупреждение: НЕКОТОРЫЕ АРГУМЕНТЫ УСТАРЕЛИ: (inputs). Они будут удалены в будущей версии. Инструкции по обновлению: inputs теперь автоматически вычисляется

Обновления весов (например, обновления скользящего среднего и дисперсии в слое BatchNormalization) могут зависеть от входных данных, переданных при вызове слоя. Следовательно, при повторном использовании одного и того же слоя с разными входами a и b, некоторые записи в layer.updates могут зависеть от a, а некоторые — от b. Этот метод автоматически отслеживает зависимости.

Этот вызов игнорируется при включенном режиме eager execution (в этом случае обновления переменных выполняются на лету и, следовательно, не нуждаются в отслеживании для последующего выполнения).

Аргументы
updates Операция обновления или список/кортеж операций обновления или нуль-аргументная вызываемая функция, которая возвращает операцию обновления. Нуль-аргументную вызываемую функцию следует передавать для отключения выполнения обновлений, установив trainable=False в этом слое при выполнении в режиме Eager.
inputs Устаревший, будет автоматически вычисляться.

add_weight

Просмотреть исходный код

add_weight(
    name=None, shape=None, dtype=None, initializer=None, regularizer=None,
    trainable=None, constraint=None, partitioner=None, use_resource=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.VariableAggregation.NONE, **kwargs
)

Добавляет новую переменную в слой.

Аргументы
name Имя переменной.
shape Форма переменной. По умолчанию скаляр, если не указано.
dtype Тип переменной. По умолчанию self.dtype или float32.
initializer Экземпляр инициализатора (вызываемая функция).
regularizer Экземпляр регуляризатора (вызываемая функция).
trainable Булево значение, должно ли переменная входить в "trainable_variables" (например, переменные, смещения) слоя или в "non_trainable_variables" (например, среднее и дисперсия BatchNorm). Обратите внимание, что trainable не может быть True, если synchronization установлено в ON_READ.
constraint Экземпляр ограничения (вызываемая функция).
partitioner Разделитель, который должен быть передан в API Trackable.
use_resource Используется ли ResourceVariable?
synchronization Указывает, когда распределённая переменная будет агрегирована. Допустимые значения — константы, определённые в классе tf.VariableSynchronization. По умолчанию синхронизация установлена в AUTO, и текущий DistributionStrategy выбирает, когда синхронизировать. Если synchronization установлено в ON_READ, trainable не должно быть установлено в True.
aggregation Указывает, как распределённая переменная будет агрегирована. Допустимые значения — константы, определённые в классе tf.VariableAggregation.
**kwargs Дополнительные ключевые аргументы. Допустимые значения — getter и collections.
Возвращает
Созданная переменная. Обычно экземпляр Variable или ResourceVariable. Если partitioner не None, возвращается экземпляр PartitionedVariable.
Исключения
RuntimeError Если вызван с регуляризацией распределённой переменной и режим eager execution включен.
ValueError При указании недопустимого типа данных без инициализатора или при установлении trainable в True со синхронизацией, установленной как ON_READ.

build

Просмотреть исходный код

build(
    input_shape
)

Создаёт переменные слоя (необязательно, для реализации подклассов).

Это метод, который реализующие подклассы Layer или Model могут переопределить, если им нужен шаг создания состояния между созданием слоя и вызовом слоя.

Обычно используется для создания весов подклассов Layer.

Аргументы
input_shape Экземпляр TensorShape, или список экземпляров TensorShape если слой ожидает список входов (по одному экземпляру на вход).

call

Просмотреть исходный код

call(
    inputs, **kwargs
)

Здесь находится логика слоя.

Аргументы
inputs Входной тензор или список/кортеж входных тензоров.
**kwargs Дополнительные ключевые аргументы.
Возвращает
Тензор или список/кортеж тензоров.

compute_mask

Просмотреть исходный код

compute_mask(
    inputs, mask=None
)

Вычисляет тензор маски вывода.

Аргументы
inputs Тензор или список тензоров.
mask Тензор или список тензоров.
Возвращает
None или тензор (или список тензоров, по одному на каждый выходной тензор слоя).

compute_output_shape

Просмотреть исходный код

compute_output_shape(
    input_shape
)

Вычисляет форму выходных данных слоя.

Если слой не был построен, этот метод вызовет build в слое. Это предполагает, что слой впоследствии будет использоваться с входными данными, соответствующими форме ввода, предоставленной здесь.

Аргументы
input_shape Кортеж формы (кортеж целых чисел) или список кортежей формы (по одному на каждый выходной тензор слоя). Кортежи формы могут включать None для свободных измерений вместо целого числа.
Возвращает
Кортеж формы ввода.

compute_output_signature

Просмотреть исходный код

compute_output_signature(
    input_signature
)

Вычисляет сигнатуру тензора вывода слоя на основе входов.

В отличие от объекта TensorShape, объект TensorSpec содержит информацию как о форме, так и о типе данных тензора. Этот метод позволяет слоям предоставлять информацию о типе данных вывода, если она отличается от типа данных входных данных. Для любого слоя, не реализующего эту функцию, фреймворк будет использовать compute_output_shape, и будет предполагать, что тип данных вывода совпадает с типом данных входных данных.

Аргументы
input_signature Один объект TensorSpec или вложенная структура объектов TensorSpec, описывающие потенциальный входной набор для слоя.
Возвращает
Один объект TensorSpec или вложенная структура объектов TensorSpec, описывающие, как слой преобразует предоставленный вход.
Возможные исключения
TypeError Если input_signature содержит объект, не являющийся TensorSpec.

count_params

Просмотреть исходный код

count_params()

Подсчитывает общее количество скалярных значений, составляющих веса.

Возвращает
Целочисленное значение - количество.
Возможные исключения
ValueError если слой еще не построен (в этом случае его веса еще не определены).

from_config

Просмотреть исходный код

@classmethod
from_config(
    config
)

Создаёт слой из его конфигурации.

Этот метод является обратным к get_config, позволяя восстановить тот же слой из словаря конфигурации. Он не обрабатывает связи между слоями (это обрабатывает Network), а также веса (это обрабатывает set_weights).

Аргументы
config Словарь Python, обычно являющийся результатом вызова get_config.
Возвращает
Экземпляр слоя.

get_config

Просмотреть исходный код

get_config()

Возвращает конфигурацию слоя.

Конфигурация слоя — это словарь Python (сериализуемый), содержащий конфигурацию слоя. Этот же слой можно позже восстановить (без его обученных весов) из этой конфигурации.

Конфигурация слоя не включает информацию о связях между слоями, а также имя класса слоя. Эти данные обрабатываются Network (слой абстракции выше).

Возвращает
Словарь Python.

get_input_at

Просмотреть исходный код

get_input_at(
    node_index
)

Возвращает тензор(ы) входа слоя в указанном узле.

Аргументы
node_index Целое число, индекс узла, из которого извлекается атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращает
Тензор (или список тензоров, если у слоя несколько входов).
Возможные исключения
RuntimeError Если вызов осуществляется в режиме Eager.

get_input_mask_at

Просмотреть исходный код

get_input_mask_at(
    node_index
)

Возвращает маску тензора(ов) входа слоя в указанном узле.

Аргументы
node_index Целое число, индекс узла, из которого извлекается атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращает
Маска тензора (или список тензоров, если у слоя несколько входов).

get_input_shape_at

Просмотреть исходный код

get_input_shape_at(
    node_index
)

Возвращает форму(ы) входных данных слоя в заданном узле.

Аргументы
node_index Целое число, индекс узла, из которого необходимо извлечь атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращаемое значение
Кортеж формы (или список кортежей форм, если у слоя несколько входов).
Исключения
RuntimeError Если вызов осуществляется в режиме Eager.

get_losses_for

Просмотреть исходный код

get_losses_for(
    inputs
)

Возвращает потери, относящиеся к определенному набору входов.

Аргументы
inputs Входной тензор или список/кортеж входных тензоров.
Возвращаемое значение
Список тензоров потерь слоя, зависящих от inputs.

get_output_at

Просмотреть исходный код

get_output_at(
    node_index
)

Возвращает выходной(ые) тензор(ы) слоя в заданном узле.

Аргументы
node_index Целое число, индекс узла, из которого необходимо извлечь атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращаемое значение
Тензор (или список тензоров, если у слоя несколько выходов).
Исключения
RuntimeError Если вызов осуществляется в режиме Eager.

get_output_mask_at

Просмотреть исходный код

get_output_mask_at(
    node_index
)

Возвращает выходной(ые) маску(и) тензора слоя в заданном узле.

Аргументы
node_index Целое число, индекс узла, из которого необходимо извлечь атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращаемое значение
Маска тензора (или список тензоров, если у слоя несколько выходов).

get_output_shape_at

Просмотреть исходный код

get_output_shape_at(
    node_index
)

Возвращает форму(ы) выходных данных слоя в заданном узле.

Аргументы
node_index Целое число, индекс узла, из которого необходимо извлечь атрибут. Например, node_index=0 соответствует первому вызову слоя.
Возвращаемое значение
Кортеж формы (или список кортежей форм, если у слоя несколько выходов).
Исключения
RuntimeError Если вызов осуществляется в режиме Eager.

get_updates_for

Просмотреть исходный код

get_updates_for(
    inputs
)

Возвращает обновления, относящиеся к определенному набору входов.

Аргументы
inputs Входной тензор или список/кортеж входных тензоров.
Возвращаемое значение
Список операций обновления слоя, зависящих от inputs.

get_weights

Просмотреть исходный код

get_weights()

Возвращает текущие веса слоя.

Возвращаемое значение
Значения весов в виде списка массивов NumPy.

set_weights

Просмотреть исходный код

set_weights(
    weights
)

Устанавливает веса слоя из массивов NumPy.

Аргументы
weights список массивов NumPy. Количество массивов и их размерность должны соответствовать количеству измерений весов слоя (т.е. должны совпадать с результатом get_weights).
Исключения
ValueError Если предоставленный список весов не соответствует спецификациям слоя.

__call__

Просмотреть исходный код

__call__(
    inputs, *args, **kwargs
)

Оборачивает call, применяя этапы предобработки и пост-обработки.

Аргументы
inputs входной(ые) тензор(ы).
*args дополнительные позиционные аргументы, которые нужно передать в self.call.
**kwargs дополнительные именованные аргументы, которые нужно передать в self.call.
Возвращаемое значение
Выходной(ые) тензор(ы).

Примечание:

  • Следующие необязательные именованные аргументы зарезервированы для определенных целей:
    • training: Булевый скалярный тензор Python-булева типа, указывающий, предназначен ли call для обучения или предсказания.
    • mask: Булевый входной массив маски.
  • Если метод call слоя принимает аргумент mask (как это делают некоторые слои Keras), его значение по умолчанию будет установлено в маску, сгенерированную для inputs предыдущим слоем (если input поступает со слоя, который сгенерировал соответствующую маску, то есть, если он поступает от слоя Keras с поддержкой маскирования).
Исключения
ValueError если метод call слоя возвращает None (неверное значение).

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/keras/layers/Layer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API