Я пытаюсь создать подкласс модели с переменным количеством слоев и размером скрытых слоев.
Поскольку количество и размер скрытых слоев не фиксированы, я добавил экземпляры слоев Keras в список в соответствии с параметрами конструктора. Но я не понимаю, почему, когда я использую список self.W, чтобы сохранить слои Keras, модель игнорирует их вес.
class MLP(keras.Model):
def __init__(self, first_size, num_hidden_layers, hidden_activation, num_classes, **kwargs):
super(MLP, self).__init__()
self.W = [Dense(units=first_size//(2**i), activation=hidden_activation) for i in range(num_hidden_layers)]
# Regression task
if num_classes == 0:
self.W.append(Dense(units=1, activation='linear'))
# Classification task
else:
self.W.append(Dense(units=num_classes, activation='softmax'))
def call(self, inputs):
x = inputs
for w in self.W:
x = w(x)
return x
model = MLP(first_size=128, num_hidden_layers=4, hidden_activation='relu', num_classes=10)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['acc'])
model.fit(x_train, y_train, batch_size=64, epochs=20, validation_data=(x_val, y_val))
model.summary()
Модель: "mlp_23"
_________________________________________________________________
Параметр выходной формы слоя (типа) # ========================================== ===========================
Всего параметров: 0
Обучаемые параметры: 0
Необучаемые параметры: 0 _________________________________________________________________