TensorFlow - разница между tf.keras.layers.Layer и tf.keras.layers..Model - PullRequest
0 голосов
/ 11 марта 2019

Читая документацию реализации пользовательских слоев с tf.keras, они задают две опции для наследования: tf.keras.Layer и tf.keras.Model.

В контексте создание пользовательских слоев , я спрашиваю себя, в чем разница между этими двумя?Технически, чем отличается?

Если бы я, например, внедрил преобразователь трансформатора, какой из них был бы более подходящим?(предполагая, что трансформатор - единственный «слой» в моей полной модели)

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

В документации:

Класс Model имеет тот же API, что и Layer, со следующим Различия: - Он предоставляет встроенную подготовку, оценку и Циклы предсказания (model.fit (), model.evaluate (), model.predict ()). - Он выставляет список своих внутренних слоев через model.layers имущество. - Предоставляет API для сохранения и сериализации.

По сути, класс "Layer" соответствует тому, что мы упоминаем в литература как «слой» (как в «сверточном слое» или «периодическом» слой ") или в виде" блока "(как в" блоке ResNet "или" начальном блоке ").

Между тем, класс «Модель» соответствует тому, что упоминается в литература как «модель» (как в «модели глубокого обучения») или как «сеть» (как в «глубокой нейронной сети»).

Поэтому, если вы хотите иметь возможность вызывать .fit(), .evaluate() или .predict() для этих блоков или хотите сохранить и загрузить эти блоки по отдельности или вам нужно использовать класс Model. Класс Layer более компактный, поэтому вы не будете раздувать слои с ненужной функциональностью ... но я думаю, что это, как правило, не будет большой проблемой.

0 голосов
/ 11 марта 2019
  • Слой принимает тензор и выдает тензор, который является результатом некоторые тензорные операции
  • Модель представляет собой композицию из нескольких слоев.

Если вы строите новую модель архитектуры с использованием существующих слоев keras / tf, то создайте пользовательскую модель.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...