0

I am using the deep neural network toolbox developed by Masayuki Tanaka at following link https://www.mathworks.com/matlabcentral/fileexchange/42853-deep-neural-network.

Now I'm trying to use the deep belief network to do the function approximation. But the result is not very well. The following is my script code. Does anyone could figure out which part can be modified to improve the fitting result?

%% Environment Settings
clear all;
close all;
clc;

rng(42);

addpath DBNLib

%% Define function to be learned and generate test and training data
num_points = 1000;

lower_bound = -2*pi;
upper_bound = 2*pi;
X_all = (upper_bound-lower_bound).*rand(num_points, 1) + lower_bound;
Y_all = cos(X_all) + 0.1*randn(num_points, 1);
Y_all = Y_all;

train_split = 0.8;
train_size  = train_split*num_points;
X_train = X_all(1:train_size);
Y_train = Y_all(1:train_size);
X_test  = X_all(train_size+1:end);
Y_test  = Y_all(train_size+1:end);

% Plot train and test data
scatter(X_train, Y_train, 'g', 'filled'),hold on
scatter(X_test, Y_test, 'r', 'filled'), grid minor
drawnow;

%% Construct deep belif network model
nodes = [1 64 64 1];
dnn = randDBN( nodes , 'GBDBN' );
nrbm = numel(dnn.rbm);

opts.MaxIter = 200;
opts.BatchSize = train_size/8;
opts.Verbose = true;
opts.StepRatio = 0.01;
opts.DropOutRate = 0.5;
opts.Object = 'Squares';

% opts.Layer = nrbm-1;
dnn = pretrainDBN(dnn, X_train, opts);
dnn= SetLinearMapping(dnn, X_train, Y_train);

opts.Layer = 0;
dnn = trainDBN(dnn, X_train, Y_train, opts);
rmse = CalcRmse(dnn, X_train, Y_train);
rmse

estimate = v2h( dnn, X_all);
scatter(X_all, estimate, 'b', 'filled')
legend('train', 'test', 'DBN Fit')

The DBN learning result:

The DBN learning result

Community
  • 1
  • 1

1 Answers1

0

Is it possible that you've scaled your inputs and targets to train your network and you've forgotten to scale the predictions back up when outputting?

Joshua R.
  • 2,282
  • 1
  • 18
  • 21
  • Hi Joshua. I didn't scale my inputs or targets before and after the training. –  Jan 03 '18 at 06:19
  • I'm not an expert at DBNs, but it looks an awful lot like your output could be shifted and scaled to match your data. Thought there might be a hint there. Clearly the modulation is right. – Joshua R. Jan 03 '18 at 06:21