0

私は田中雅之が開発したディープ ニューラル ネットワーク ツールボックスを次のリンクで使用しています

今、私は深層信念ネットワークを使って関数近似をしようとしています。しかし、結果はあまり良くありません。以下は私のスクリプトコードです。フィッティング結果を改善するためにどの部分を変更できるかを誰かが理解できますか?

%% 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')

DBN 学習結果:

DBN学習結果

4

1 に答える 1