From 44eaad59ee7db96e9d0ff163d83e276a19b16d56 Mon Sep 17 00:00:00 2001 From: Rasmus Berg Palm Date: Sun, 3 Mar 2013 21:13:28 +0100 Subject: [PATCH] fixes #21. Thanks @skaae --- SAE/saetrain.m | 2 ++ tests/test_example_SAE.m | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/SAE/saetrain.m b/SAE/saetrain.m index 1cf6e5f..ccd464b 100644 --- a/SAE/saetrain.m +++ b/SAE/saetrain.m @@ -4,5 +4,7 @@ sae.ae{i} = nntrain(sae.ae{i}, x, x, opts); t = nnff(sae.ae{i}, x, x); x = t.a{2}; + %remove bias term + x = x(:,2:end); end end diff --git a/tests/test_example_SAE.m b/tests/test_example_SAE.m index ee07255..3dbe431 100644 --- a/tests/test_example_SAE.m +++ b/tests/test_example_SAE.m @@ -32,3 +32,39 @@ nn = nntrain(nn, train_x, train_y, opts); [er, bad] = nntest(nn, test_x, test_y); assert(er < 0.16, 'Too big error'); + +%% ex2 train a 100-100 hidden unit SDAE and use it to initialize a FFNN +% Setup and train a stacked denoising autoencoder (SDAE) +rng(0); +sae = saesetup([784 100 100]); +sae.ae{1}.normalize_input = 0; +sae.ae{1}.activation_function = 'sigm'; +sae.ae{1}.learningRate = 1; +sae.ae{1}.inputZeroMaskedFraction = 0.5; + +sae.ae{2}.normalize_input = 0; +sae.ae{2}.activation_function = 'sigm'; +sae.ae{2}.learningRate = 1; +sae.ae{2}.inputZeroMaskedFraction = 0.5; + +opts.numepochs = 1; +opts.batchsize = 100; +sae = saetrain(sae, train_x, opts); +visualize(sae.ae{1}.W{1}(:,2:end)') + +% Use the SDAE to initialize a FFNN +nn = nnsetup([784 100 100 10]); +nn.normalize_input = 0; +nn.activation_function = 'sigm'; +nn.learningRate = 1; + +%add pretrained weights +nn.W{1} = sae.ae{1}.W{1}; +nn.W{2} = sae.ae{2}.W{1}; + +% Train the FFNN +opts.numepochs = 1; +opts.batchsize = 100; +nn = nntrain(nn, train_x, train_y, opts); +[er, bad] = nntest(nn, test_x, test_y); +assert(er < 0.1, 'Too big error');