class NiN(d2l.Classifier):
def __init__(self, lr=0.1, num_classes=10, rngs=None):
super().__init__()
self.save_hyperparameters(ignore=['rngs'])
rngs = (nnx.Rngs(params=d2l.get_key(), dropout=d2l.get_key())
if rngs is None else rngs)
self.net = nnx.Sequential(
nin_block(1, 96, (11, 11), (4, 4), (0, 0), rngs),
lambda x: nnx.max_pool(x, (3, 3), strides=(2, 2)),
nin_block(96, 256, (5, 5), (1, 1), (2, 2), rngs),
lambda x: nnx.max_pool(x, (3, 3), strides=(2, 2)),
nin_block(256, 384, (3, 3), (1, 1), (1, 1), rngs),
lambda x: nnx.max_pool(x, (3, 3), strides=(2, 2)),
nnx.Dropout(0.5, rngs=rngs),
nin_block(384, num_classes, (3, 3), (1, 1), (1, 1), rngs),
lambda x: x.mean(axis=(1, 2)), # global avg pooling over H, W (NHWC)
lambda x: x.reshape((x.shape[0], -1))) # flatten