view main/nnet/doc/latex/users/examples/1/MLP9_1_1.tex @ 11265:4d56b549b185 octave-forge

maint: update Michel D. Schmid e-mail
author carandraug
date Sat, 24 Nov 2012 22:16:49 +0000
parents 96068ecb502f
children
line wrap: on
line source

\noindent
\ttfamily
\hlstd{}\hlline{00001\ }\hlslc{\#\# Copyright (C) 2006 Michel D. Schmid}\hlstd{\ \ }\hlslc{$<$michael.schmid@plexso.com$>$}\\
\hlline{00002\ }\hlstd{}\hlslc{\#\#}\\
\hlline{00003\ }\hlstd{}\hlslc{\#\#}\\
\hlline{00004\ }\hlstd{}\hlslc{\#\# This program is free software; you can redistribute it and/or modify it}\\
\hlline{00005\ }\hlstd{}\hlslc{\#\# under the terms of the GNU General Public License as published by}\\
\hlline{00006\ }\hlstd{}\hlslc{\#\# the Free Software Foundation; either version 2, or (at your option)}\\
\hlline{00007\ }\hlstd{}\hlslc{\#\# any later version.}\\
\hlline{00008\ }\hlstd{}\hlslc{\#\#}\\
\hlline{00009\ }\hlstd{}\hlslc{\#\# This program is distributed in the hope that it will be useful, but}\\
\hlline{00010\ }\hlstd{}\hlslc{\#\# WITHOUT ANY WARRANTY; without even the implied warranty of}\\
\hlline{00011\ }\hlstd{}\hlslc{\#\# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.}\hlstd{\ \ }\hlslc{See the GNU}\\
\hlline{00012\ }\hlstd{}\hlslc{\#\# General Public License for more details.}\\
\hlline{00013\ }\hlstd{}\hlslc{\#\#}\\
\hlline{00014\ }\hlstd{}\hlslc{\#\# You should have received a copy of the GNU General Public License}\\
\hlline{00015\ }\hlstd{}\hlslc{\#\# along with this program; see the file COPYING.}\hlstd{\ \ }\hlslc{If not, write to the Free}\\
\hlline{00016\ }\hlstd{}\hlslc{\#\# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA}\\
\hlline{00017\ }\hlstd{}\hlslc{\#\# 02110{-}1301, USA.}\\
\hlline{00018\ }\hlstd{}\\
\hlline{00019\ }\hlslc{\#\# Author: Michel D. Schmid}\\
\hlline{00020\ }\hlstd{}\\
\hlline{00021\ }\\
\hlline{00022\ }\hlslc{\#\# load data}\\
\hlline{00023\ }\hlstd{mData }\hlsym{= }\hlstd{}\hlkwc{load}\hlstd{}\hlsym{(}\hlstd{}\hlstr{"mData.txt"}\hlstd{}\hlsym{,}\hlstd{}\hlstr{"mData"}\hlstd{}\hlsym{);}\\
\hlline{00024\ }\hlstd{mData }\hlsym{= }\hlstd{mData.mData}\hlsym{;}\\
\hlline{00025\ }\hlstd{}\hlsym{{[}}\hlstd{nRows}\hlsym{, }\hlstd{nColumns}\hlsym{{]} = }\hlstd{}\hlkwc{size}\hlstd{}\hlsym{(}\hlstd{mData}\hlsym{);}\\
\hlline{00026\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{\# this file contains 13 columns.}\\
\hlline{00027\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{\# The first 12 columns are the inputs}\\
\hlline{00028\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{\# the last column is the output,}\\
\hlline{00029\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{\# remove column 4, 8 and 12!}\\
\hlline{00030\ }\hlstd{}\hlstd{\ \ \ \ }\hlstd{}\hlslc{\# 89 rows.}\\
\hlline{00031\ }\hlstd{\\
\hlline{00032\ }\\
\hlline{00033\ }mOutput }\hlsym{= }\hlstd{}\hlstd{mData}\hlstd{}\hlsym{(:,}\hlstd{}\hlkwa{end}\hlstd{}\hlsym{);}\\
\hlline{00034\ }\hlstd{mInput }\hlsym{= }\hlstd{}\hlstd{mData}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{}\hlkwa{end}\hlstd{}\hlsym{{-}}\hlstd{}\hlnum{1}\hlstd{}\hlsym{);}\\
\hlline{00035\ }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,{[}}\hlstd{}\hlnum{4 8 12}\hlstd{}\hlsym{{]}) = {[}{]}; }\hlstd{}\hlslc{\# delete column 4, 8 and 12}\\
\hlline{00036\ }\hlstd{}\\
\hlline{00037\ }\hlslc{\#\# now prepare data}\\
\hlline{00038\ }\hlstd{mInput }\hlsym{= }\hlstd{mInput}\hlstd{';}\\
\hlline{00039\ }\hlstd{mOutput = mOutput'}\hlstd{}\hlsym{;}\\
\hlline{00040\ }\hlstd{}\\
\hlline{00041\ }\hlslc{\# now split the data matrix in 3 pieces, train data, test data and validate data}\\
\hlline{00042\ }\hlstd{}\hlslc{\# the proportion should be about 1/2 train, 1/3 test and 1/6 validate data}\\
\hlline{00043\ }\hlstd{}\hlslc{\# in this neural network we have 12 weights, for each weight at least 3 train sets..}\\
\hlline{00044\ }\hlstd{}\hlslc{\# (that's a rule of thumb like 1/2, 1/3 and 1/6)}\\
\hlline{00045\ }\hlstd{}\hlslc{\# 1/2 of 89 = 44.5; let's take 44 for training}\\
\hlline{00046\ }\hlstd{nTrainSets }\hlsym{= }\hlstd{}\hlkwc{floor}\hlstd{}\hlsym{(}\hlstd{nRows}\hlsym{/}\hlstd{}\hlnum{2}\hlstd{}\hlsym{);}\\
\hlline{00047\ }\hlstd{}\hlslc{\# now the rest of the sets are again 100\%}\\
\hlline{00048\ }\hlstd{}\hlslc{\# ==$>$ 2/3 for test sets and 1/3 for validate sets}\\
\hlline{00049\ }\hlstd{nTestSets }\hlsym{= (}\hlstd{nRows}\hlsym{{-}}\hlstd{nTrainSets}\hlsym{)/}\hlstd{}\hlnum{3}\hlstd{}\hlsym{{*}}\hlstd{}\hlnum{2}\hlstd{}\hlsym{;}\\
\hlline{00050\ }\hlstd{nValiSets }\hlsym{= }\hlstd{nRows}\hlsym{{-}}\hlstd{nTrainSets}\hlsym{{-}}\hlstd{nTestSets}\hlsym{;}\\
\hlline{00051\ }\hlstd{\\
\hlline{00052\ }mValiInput }\hlsym{= }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nValiSets}\hlsym{);}\\
\hlline{00053\ }\hlstd{mValliOutput }\hlsym{= }\hlstd{}\hlstd{mOutput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nValiSets}\hlsym{);}\\
\hlline{00054\ }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nValiSets}\hlsym{) = {[}{]};}\\
\hlline{00055\ }\hlstd{}\hlstd{mOutput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nValiSets}\hlsym{) = {[}{]};}\\
\hlline{00056\ }\hlstd{mTestInput }\hlsym{= }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTestSets}\hlsym{);}\\
\hlline{00057\ }\hlstd{mTestOutput }\hlsym{= }\hlstd{}\hlstd{mOutput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTestSets}\hlsym{);}\\
\hlline{00058\ }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTestSets}\hlsym{) = {[}{]};}\\
\hlline{00059\ }\hlstd{}\hlstd{mOutput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTestSets}\hlsym{) = {[}{]};}\\
\hlline{00060\ }\hlstd{mTrainInput }\hlsym{= }\hlstd{}\hlstd{mInput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTrainSets}\hlsym{);}\\
\hlline{00061\ }\hlstd{mTrainOutput }\hlsym{= }\hlstd{}\hlstd{mOutput}\hlstd{}\hlsym{(:,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{:}\hlstd{nTrainSets}\hlsym{);}\\
\hlline{00062\ }\hlstd{}\\
\hlline{00063\ }\hlsym{{[}}\hlstd{mTrainInputN}\hlsym{,}\hlstd{cMeanInput}\hlsym{,}\hlstd{cStdInput}\hlsym{{]} = }\hlstd{}\hlkwc{prestd}\hlstd{}\hlsym{(}\hlstd{mTrainInput}\hlsym{);}\hlstd{}\hlslc{\# standardize inputs}\\
\hlline{00064\ }\hlstd{}\\
\hlline{00065\ }\hlslc{\#\# comments: there is no reason to standardize the outputs because we have only}\\
\hlline{00066\ }\hlstd{}\hlslc{\# one output ...}\\
\hlline{00067\ }\hlstd{}\\
\hlline{00068\ }\hlslc{\# define the max and min inputs for each row}\\
\hlline{00069\ }\hlstd{mMinMaxElements }\hlsym{= }\hlstd{}\hlkwc{min\textunderscore max}\hlstd{}\hlsym{(}\hlstd{mTrainInputN}\hlsym{); }\hlstd{}\hlslc{\# input matrix with (R x 2)...}\\
\hlline{00070\ }\hlstd{}\\
\hlline{00071\ }\hlslc{\#\# define network}\\
\hlline{00072\ }\hlstd{nHiddenNeurons }\hlsym{= }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
\hlline{00073\ }\hlstd{nOutputNeurons }\hlsym{= }\hlstd{}\hlnum{1}\hlstd{}\hlsym{;}\\
\hlline{00074\ }\hlstd{\\
\hlline{00075\ }MLPnet }\hlsym{= }\hlstd{}\hlkwc{newff}\hlstd{}\hlsym{(}\hlstd{mMinMaxElements}\hlsym{,{[}}\hlstd{nHiddenNeurons nOutputNeurons}\hlsym{{]},}\hlstd{$\backslash$\\
\hlline{00076\ }}\hlstd{\ \ \ \ \ \ \ \ }\hlstd{}\hlsym{\{}\hlstd{}\hlstr{"tansig"}\hlstd{}\hlsym{,}\hlstd{}\hlstr{"purelin"}\hlstd{}\hlsym{\},}\hlstd{}\hlstr{"trainlm"}\hlstd{}\hlsym{,}\hlstd{}\hlstr{""}\hlstd{}\hlsym{,}\hlstd{}\hlstr{"mse"}\hlstd{}\hlsym{);}\\
\hlline{00077\ }\hlstd{}\hlslc{\#\# for test purpose, define weights by hand}\\
\hlline{00078\ }\hlstd{MLPnet.IW}\hlsym{\{}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{\}(:) = }\hlstd{}\hlnum{1.5}\hlstd{}\hlsym{;}\\
\hlline{00079\ }\hlstd{MLPnet.LW}\hlsym{\{}\hlstd{}\hlnum{2}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{\}(:) = }\hlstd{}\hlnum{0.5}\hlstd{}\hlsym{;}\\
\hlline{00080\ }\hlstd{MLPnet.b}\hlsym{\{}\hlstd{}\hlnum{1}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{\}(:) = }\hlstd{}\hlnum{1.5}\hlstd{}\hlsym{;}\\
\hlline{00081\ }\hlstd{MLPnet.b}\hlsym{\{}\hlstd{}\hlnum{2}\hlstd{}\hlsym{,}\hlstd{}\hlnum{1}\hlstd{}\hlsym{\}(:) = }\hlstd{}\hlnum{0.5}\hlstd{}\hlsym{;}\\
\hlline{00082\ }\hlstd{}\\
\hlline{00083\ }\hlkwc{saveMLPStruct}\hlstd{}\hlsym{(}\hlstd{MLPnet}\hlsym{,}\hlstd{}\hlstr{"MLP3test.txt"}\hlstd{}\hlsym{);}\\
\hlline{00084\ }\hlstd{}\\
\hlline{00085\ }\hlslc{\#\# define validation data new, for matlab compatibility}\\
\hlline{00086\ }\hlstd{VV.P }\hlsym{= }\hlstd{mValiInput}\hlsym{;}\\
\hlline{00087\ }\hlstd{VV.T }\hlsym{= }\hlstd{mValliOutput}\hlsym{;}\\
\hlline{00088\ }\hlstd{}\\
\hlline{00089\ }\hlslc{\#\# standardize also the validate data}\\
\hlline{00090\ }\hlstd{VV.P }\hlsym{= }\hlstd{}\hlkwc{trastd}\hlstd{}\hlsym{(}\hlstd{VV.P}\hlsym{,}\hlstd{cMeanInput}\hlsym{,}\hlstd{cStdInput}\hlsym{);}\\
\hlline{00091\ }\hlstd{}\\
\hlline{00092\ }\hlsym{{[}}\hlstd{net}\hlsym{{]} = }\hlstd{}\hlkwc{train}\hlstd{}\hlsym{(}\hlstd{MLPnet}\hlsym{,}\hlstd{mTrainInputN}\hlsym{,}\hlstd{mTrainOutput}\hlsym{,{[}{]},{[}{]},}\hlstd{VV}\hlsym{);}\\
\hlline{00093\ }\hlstd{}\\
\hlline{00094\ }\hlslc{\# make preparations for net test and test MLPnet}\\
\hlline{00095\ }\hlstd{}\hlslc{\#}\hlstd{\ \ }\hlslc{standardise input \& output test data}\\
\hlline{00096\ }\hlstd{}\hlsym{{[}}\hlstd{mTestInputN}\hlsym{{]} = }\hlstd{}\hlkwc{trastd}\hlstd{}\hlsym{(}\hlstd{mTestInput}\hlsym{,}\hlstd{cMeanInput}\hlsym{,}\hlstd{cStdInput}\hlsym{);}\\
\hlline{00097\ }\hlstd{}\\
\hlline{00098\ }\hlsym{{[}}\hlstd{simOut}\hlsym{{]} = }\hlstd{}\hlkwc{sim}\hlstd{}\hlsym{(}\hlstd{net}\hlsym{,}\hlstd{mTestInputN}\hlsym{);}\\
\hlline{00099\ }\hlstd{simOut}\\
\mbox{}
\normalfont