Когда мы должны наследовать keras.Model вместо keras.layers.Layer, даже если мы не используем model.fit?

В некоторых руководствах по Tensorflow с tf2 (например, Neural Machine Translation with Attention и Eager essentials), они определяют пользовательские tf.keras.Model вместо tf.keras.layers.Layer (например, BahdanauAttention(tf.keras.Model):)

Кроме того, в документе Модели: создание слоев tf.keras.Model используется явно. В разделе говорится:

Основной класс, используемый при создании многослойной вещи, которая содержит другие слои, — это tf.keras.Model. Реализация осуществляется путем наследования от tf.keras.Model.

Похоже, нам нужно наследовать tf.keras.Model, чтобы определить слой, который составляет дочерние слои.

Однако, насколько я проверял, этот код работает, даже если я определяю ResnetIdentityBlock как дочерний класс tf.keras.layers.Layer. Два других руководства также работают с Layer. В дополнение к этому, еще один учебник говорит

Модель похожа на слой, но с дополнительными утилитами для обучения и сериализации.

Таким образом, я понятия не имею, в чем реальная разница между tf.keras.Model и tf.keras.layers.Layer и почему эти три учебника с выполнением Eager используют tf.keras.Model, хотя они не используют утилиты обучения и сериализации tf.keras.Model.

Почему нам нужно наследовать tf.keras.Model в этих туториалах?

Дополнительный комментарий

утилиты Model работают только со специальными подмножествами Layer (Слои, чьи call получают только один ввод). Таким образом, я думаю, что идея типа "Всегда расширять Модель, потому что Модель имеет больше возможностей" неверна. Кроме того, это нарушает базовую программу программирования, например SRP.


person yunabe    schedule 26.09.2019    source источник
comment
В предоставленных вами нетерпеливых примерах и руководствах по написанию пользовательских слоев мы не можем заменить модель слоем, поэтому эти руководства не относятся к вашему вопросу. Единственный учебник, к которому применим ваш вопрос, - это BahdanauAttention примера нейронного перевода.   -  person eugen    schedule 27.09.2019


Ответы (1)


Обновить

Итак, комментарий был: Yes, I know training and serialization utilities exist in Model as I wrote in the question. My question is why TF tutorials need to use Model though they don't use these methods.

В этом случае авторы могут дать лучший ответ, потому что ваш вопрос спрашивает, почему они выбрали один метод вместо другого, когда оба они могут одинаково хорошо выполнять свою работу. Почему можно делать работу одинаково хорошо? Ну, потому что Model is just like a Layer, but with added training and serialization utilities.

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

Надеюсь, поможет

PS.

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


С моделью вы можете тренироваться, но только со слоем вы не можете. См. список их методов ниже (за исключением внутренних и унаследованных):

tf.keras.layers.Layer

activity_regularizer
activity_regularizer
add_loss
add_metric
add_update
add_variable
add_weight
apply
build
call
compute_mask
compute_output_shape
count_params
dtype
dynamic
from_config
get_config
get_input_at
get_input_mask_at
get_input_shape_at
get_losses_for
get_output_at
get_output_mask_at
get_output_shape_at
get_updates_for
get_weights
inbound_nodes
input
input_mask
input_shape
losses
metrics
name
non_trainable_variables
non_trainable_weights
outbound_nodes
output
output_mask
output_shape
set_weights
trainable
trainable
trainable_variables
trainable_weights
updates
variables
weights

видеть? там нет метода подгонки или оценки. tf.keras.Model


compile
evaluate
evaluate_generator
fit
fit_generator
get_weights
load_weights
metrics
metrics_names
predict
predict_generator
predict_on_batch
reset_metrics
run_eagerly
run_eagerly
sample_weights
test_on_batch
train_on_batch
person eugen    schedule 27.09.2019
comment
Да, я знаю, что утилиты обучения и сериализации существуют в модели, как я писал в вопросе. Мой вопрос заключается в том, почему учебники по TF должны использовать модель, хотя они не используют эти методы. - person yunabe; 27.09.2019
comment
@yunabe, ты нашел ответ на это? - person donto; 19.01.2020