Цель состоит в том, чтобы создать блок слоев, используя функциональный API Keras, который можно использовать (также с точки зрения синтаксиса) как «обычный» слой Keras. Вот игрушечный пример
from tensorflow.keras import layers as kl
def layer_block(prev_layer, args):
# some code using 'args'
layer = kl.Dense(units=prev_layer.shape[1])(prev_layer)
layer = kl.Dense(units=5)(layer)
layer = kl.Dense(units=prev_layer.shape[1])(layer)
return layer
Этот блок вызывается с использованием layer_block(prev_layer, args)
, что противоречит синтаксису функционального API Keras. Скорее, он должен выглядеть следующим образом: layer_block(args)(prev_layer)
.
. До сих пор подход заключался в том, чтобы обернуть этот блок другим блоком:
def outer_block(args):
def layer_block(prev_layer, args):
# some code using 'args'
layer = kl.Dense(units=prev_layer.shape[1])(prev_layer)
layer = kl.Dense(units=5)(layer)
layer = kl.Dense(units=prev_layer.shape[1])(layer)
return layer
return lambda prev_layer: layer_block(prev_layer, args)
Теперь возникает два вопроса:
- Есть ли более простой способ добиться этого?
- Эффективен ли он таким образом или отрицательно влияет на производительность?
Заранее спасибо!