@option(MNISTConfigs.train_dataset) def mnist_train_dataset(c: MNISTConfigs): return _dataset(True, c.dataset_transforms) @option(MNISTConfigs.valid_dataset) def mnist_valid_dataset(c: MNISTConfigs): return _dataset(False, c.dataset_transforms) @option(MNISTConfigs.train_loader) def mnist_train_loader(c: MNISTConfigs): return DataLoader(c.train_dataset, batch_size=c.train_batch_size, shuffle=c.train_loader_shuffle) @option(MNISTConfigs.valid_loader) def mnist_valid_loader(c: MNISTConfigs): return DataLoader(c.valid_dataset, batch_size=c.valid_batch_size, shuffle=c.valid_loader_shuffle) aggregate(MNISTConfigs.dataset_name, 'MNIST', (MNISTConfigs.dataset_transforms, 'mnist_transforms'), (MNISTConfigs.train_dataset, 'mnist_train_dataset'), (MNISTConfigs.valid_dataset, 'mnist_valid_dataset'), (MNISTConfigs.train_loader, 'mnist_train_loader'), (MNISTConfigs.valid_loader, 'mnist_valid_loader'))
bias1=c.bias1, bias2=c.bias2, bias_gate=c.bias_gate) # ## GLU Variants # These are variants with gated hidden layers for the FFN # as introduced in paper [GLU Variants Improve Transformer](https://papers.labml.ai/paper/2002.05202). # We have omitted the bias terms as specified in the paper. # ### FFN with Gated Linear Units # # $$FFN_{GLU}(x)(x, W_1, V, W_2) = (\sigma(x W_1) \otimes x V) W_2$$ aggregate(FeedForwardConfigs.glu_variant, 'GLU', (FeedForwardConfigs.is_gated, True), (FeedForwardConfigs.bias1, False), (FeedForwardConfigs.bias2, False), (FeedForwardConfigs.bias_gate, False), (FeedForwardConfigs.activation, nn.Sigmoid())) # ### FFN with Bilinear hidden layer # # $$FFN_{Bilinear}(x)(x, W_1, V, W_2) = (x W_1 \otimes x V) W_2$$ aggregate(FeedForwardConfigs.glu_variant, 'Bilinear', (FeedForwardConfigs.is_gated, True), (FeedForwardConfigs.bias1, False), (FeedForwardConfigs.bias2, False), (FeedForwardConfigs.bias_gate, False), (FeedForwardConfigs.activation, nn.Identity())) # ### FFN with ReLU gate # # $$FFN_{ReGLU}(x)(x, W_1, V, W_2) = (\max(0, x W_1) \otimes x V) W_2$$
return conf @option(MyConfigs.without_primary) def module_without_primary(c: MyConfigs): conf = Module() conf.p1_m1 = c.p1 + ' m1' return conf @option(MyConfigs.v_module) def v_module(): return Module() aggregate(MyConfigs.a, 'test', (MyConfigs.a1, 'test1'), (MyConfigs.a2, 'test2')) # TEST: This should fail # @option(MyConfigs.undefined) # def undefined_config(c: MyConfigs): # return c.p1 def test(): hyperparams(MyConfigs.o1) configs = MyConfigs() configs.p2 = 'p2_set' try: configs.p3 = 'not defined' except AttributeError: