Я работаю над классом для создания всевозможных симметричных АЕ. Сейчас я портирую этот класс на TF 2.0, и он сложнее, чем я думал. Тем не менее, я использую подклассы слоев и моделей для достижения этой цели. Поэтому я хочу сгруппировать несколько слоев керас в один слой керас. Но если я хочу написать что-то вроде этого:
def __init__(self, name, keras_layer, **kwargs):
self.keras_layer = tf.keras.layer.Conv2D
super(CoderLayer, self).__init__(name=name, **kwargs)
Я получаю следующую ошибку, потому что tf хочет использовать этот неинициализированный слой:
TypeError: _method_wrapper() missing 1 required positional argument: 'self'
Я также пытался обернуть это в список, но это тоже не сработало.
EDIT
Вот работающий минимальный пример и полный возврат:
import tensorflow as tf
print(tf.__version__) # 2.0.0-alpha0
class CoderLayer(tf.keras.layers.Layer):
def __init__(self, name, keras_layer):
self.keras_layer = keras_layer
self.out = keras_layer(12, [3, 3])
super(CoderLayer, self).__init__(name=name)
def call(self, inputs):
return self.out(inputs)
inputs = tf.keras.Input(shape=(200, 200, 3), batch_size=12)
layer = CoderLayer("minimal_example", tf.keras.layers.Conv2D)
layer(inputs)
Traceback:
Traceback (most recent call last):
File "..\baseline_cae.py", line 24, in <module>
layer(inputs)
File "..\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 581, in __call__
self._clear_losses()
File "..\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\training\tracking\base.py", line 456, in _method_wrapper
result = method(self, *args, **kwargs)
File "..\AppData\Local\Continuum\anaconda3\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 818, in _clear_losses
layer._clear_losses()
TypeError: _method_wrapper() missing 1 required positional argument: 'self'