На этом шаге мы приведем реализацию этого класса.
Теперь создадим класс NaiveSequential, объединяющий слои в цепочку. Он обертывает список слоев и реализует метод __call__(), который просто вызывает по порядку слои в этом списке, передавая входные данные. Он также имеет свойство weights, упрощающее наблюдение за весами слоев.
class NaiveSequential: def __init__(self, layers): self.layers = layers def __call__(self, inputs): x = inputs for layer in self.layers: x = layer(x) return x @property def weights(self): weights = [] for layer in self.layers: weights += layer.weights return weights
Используя классы NaiveDense и NaiveSequential, можно создать имитацию модели Keras:
model = NaiveSequential([ NaiveDense(input_size=28 * 28, output_size=512, activation=tf.nn.relu), NaiveDense(input_size=512, output_size=10, activation=tf.nn.softmax) ]) assert len(model.weights) == 4
На следующем шаге мы рассмотрим генератор пакетов.