📄 createnetrsom.m
字号:
function Net = CreateNetRSOM(INNum , RSOMSize , varargin)% CreateNetRSOM Create recurrent self-organizing map (RSOM) network% structure%% Inputs: INNum: Number of inputs% RSOMSize: Number of neurons% PROPERTIES: See bellow.%% Output: Net: RSOM network structure%% Example:% 1) Create a default network with two inputs and 4x6 map:% Net = CreateNetRSOM(1 , [4 , 6]);% 2) Create a network with one input, 8x8 map, where the% neighborhood variance is 2 and learning function is 'RSOMHebbV01':% Net = CreateNetRSOM(1 , [8 , 8] , 'RSOMNeiFunP' , 2 , ...% 'RSOMUnSLFun' , 'RSOMHebbV01');%% This function creates a RSOM network structure that can be passed to% 'SimNetRSOM' for simulation and learning and it has all necessary% information about the network.% There are several properties with default values that one can define% for the network, as listed bellow. These properties can be assigned in% a pairwised manner. Please check RSOMSimV01 and RSOMSimV02 for complete% examples on how to override default values.%% Properties:% RSOMType: Can be 'RecSOM' for Recursive Self-Organizing Maps [1] or% 'SOMSD' for Self-Organizing Maps for Structured Data [2].% Default is 'RecSOM'.% RSOMTopo: Topology of the network, can be 'Hex' forhexagonal or% 'Grid' for reqular square lattice connections. Default is% 'Hex'.% RSOMNeiFunP: Variance parameter for neighborhood function, default = 5.% RSOMUnSLFun: Learning function, should be a file name or 'None' if no% training is required. Defaults is 'None'.% RSOMUnSLStepIN: Learning rate for input weights, default = 0.1.% RSOMUnSLStepC: Learning rate for recurrent weights, default = 0.1.%% [1]. T. Voegtlin. "Recursive self-organizing maps". Neur.Netw.,% 15(8-9):979-991, 2002.% [2]. M. Hagenbuchner, A. Sperduti, and A.C. Tsoi. "A Self-Organizing Map% for Adaptive Processing of Structured Data". IEEE Transactions on Neural% Networks, 14(3):491-505, 2003.%% ---------------------------------------------------------% Amir Reza Saffari Azar Alamdari% http://www.ymer.org/main.htm , amir@ymer.org% ---------------------------------------------------------%-----Initialization%% RSOMRSOMType = 'RecSOM';INRSOMWType = 'Random';RSOMWType = 'Random';RSOMDist = 'Link';RSOMTopo = 'Hex';RSOMNeiFun = 'Guass';RSOMNeiFunP = 5;RSOMDFun = 'Euclid';RSOMCFun = 'Exp';RSOMDINP = 3;RSOMDCP = 1;RSOMUnSLMode = 'Online';RSOMUnSLFun = 'None';RSOMUnSLStepIN = 0.1;RSOMUnSLStepC = 0.1;%% Misc.ShowMessages = 1;%% Checking inputsif length(varargin) > 0 VarCounter = 1; while VarCounter < length(varargin) CurArg = varargin{VarCounter}; switch CurArg case 'RSOMType' RSOMType = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'INRSOMWType' INRSOMWType = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMWType' RSOMWType = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMDist' RSOMDist = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMTopo' RSOMTopo = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMNeiFun' RSOMNeiFun = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMNeiFunP' RSOMNeiFunP = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMDFun' RSOMDFun = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMCFun' RSOMCFun = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMDINP' RSOMDINP = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMDCP' RSOMDCP = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMUnSLMode' RSOMUnSLMode = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMUnSLFun' RSOMUnSLFun = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMUnSLStepIN' RSOMUnSLStepIN = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'RSOMUnSLStepC' RSOMUnSLStepC = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; case 'ShowMessages' ShowMessages = varargin{VarCounter + 1}; VarCounter = VarCounter + 2; otherwise error('Unknown input !!!') end endend%-----Creating weights%% RSOMRSOMNum = prod(RSOMSize);switch INRSOMWType case 'Random' WINRSOM = randn(INNum , RSOMNum); otherwise error('Unknown INRSOMWType !!!') endswitch RSOMType case 'RecSOM' switch RSOMWType case 'Random' WRSOM = randn(RSOMNum , RSOMNum); otherwise error('Unknown RSOMWType !!!') end TempState = zeros(RSOMNum , 1); case 'SOMSD' switch RSOMWType case 'Random' WRSOM = max(RSOMSize)*rand(size(RSOMSize , 2) , RSOMNum); otherwise error('Unknown RSOMWType !!!') end TempState = zeros(size(RSOMSize , 2) , 1); otherwise error('Unknown RSOMType !!!') endswitch RSOMTopo case 'Hex' RSOMPos = hextop(RSOMSize); case 'Grid' RSOMPos = gridtop(RSOMSize); otherwise error('Unknown RSOMTopo !!!') endswitch RSOMDist case 'Link' RSOMPosD = linkdist(RSOMPos); otherwise error('Unknown RSOMDist !!!') end%-----Creating network object%% RSOMDimStr = struct('INNum' , INNum , 'RSOMNum' , RSOMNum , 'RSOMSize' , RSOMSize);RSOMStr = struct('RSOMType' , RSOMType , 'INRSOMWType' , INRSOMWType , 'RSOMWType' , RSOMWType , 'RSOMDist' , RSOMDist , 'RSOMTopo' , RSOMTopo , ... 'RSOMNeiFun' , RSOMNeiFun , 'RSOMNeiFunP' , RSOMNeiFunP , 'RSOMDFun' , RSOMDFun , 'RSOMCFun' , RSOMCFun , 'RSOMDINP' , RSOMDINP , ... 'RSOMDCP' , RSOMDCP , 'RSOMPos' , RSOMPos , 'RSOMPosD' , RSOMPosD);RSOMLStr = struct('RSOMUnSLMode' , RSOMUnSLMode , 'RSOMUnSLFun' , RSOMUnSLFun , 'RSOMUnSLStepIN' , RSOMUnSLStepIN , ... 'RSOMUnSLStepC' , RSOMUnSLStepC);RSOMSStr = struct('RSOMState' , TempState , 'Epoch' , 1 , 'MaxEpoch' , 100);RSOMWStr = struct('WINRSOM' , WINRSOM , 'WRSOM' , WRSOM);MiscStr = struct('ShowMessages' , ShowMessages);%% NetNet = struct('Dim' , DimStr , 'RSOM' , RSOMStr , 'W' , RSOMWStr , 'Learn' , RSOMLStr , 'State' , RSOMSStr , 'Misc' , MiscStr);if ShowMessages disp('Creating network: Done.')endreturn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -