⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 som_sompaktrain.m

📁 很全的som工具箱 四个demo可为初学者提够帮助
💻 M
📖 第 1 页 / 共 2 页
字号:
    M = reshape(sMap,[prod(msize) dim]);  else    msize = [orig_size(1) 1];     dim = orig_size(2);  end  sMap   = som_map_struct(dim,'msize',msize);  sTopol = sMap.topol;end[munits dim] = size(sMap.codebook);% datagivendatafile = '';if ischar(D),   data_name = D;   givendatafile = D;  D = [];  dlen = NaN;else  if isstruct(D),     data_name = D.name;     D = D.data;     else    data_name = inputname(2);   end  D = D(find(sum(isnan(D),2) < dim),:); % remove empty vectors from the data  [dlen ddim] = size(D);                % check input dimension  if ddim ~= dim, error('Map and data dimensions must agree.'); endend% vararginsTrain = som_set('som_train','algorithm','seq',...			     'neigh',sMap.neigh,...			     'mask',ones(dim,1),...			     'data_name',data_name);tlen_type  = 'epochs';random_seed = 0; snapshotname = ''; snapshotinterval = 0;i=1; while i<=length(varargin),   argok = 1;   if ischar(varargin{i}),     switch varargin{i},      % argument IDs     case 'msize',       i=i+1; sTopol.msize = varargin{i};      case 'lattice',     i=i+1; sTopol.lattice = varargin{i};     case 'neigh',       i=i+1; sTrain.neigh = varargin{i};     case 'trainlen',    i=i+1; sTrain.trainlen = varargin{i};     case 'tlen_type',   i=i+1; tlen_type = varargin{i};      case 'radius_ini',  i=i+1; sTrain.radius_ini = varargin{i};     case 'radius',      i=i+1; sTrain.radius_ini = varargin{i}(1);     case 'alpha_type',  i=i+1; sTrain.alpha_type = varargin{i};     case 'alpha_ini',   i=i+1; sTrain.alpha_ini = varargin{i};     case 'alpha',       i=i+1; sTrain.alpha_ini = varargin{i}(1);     case 'seed',        i=i+1; random_seed = varargin{i};     case 'snapshotname',i=i+1; snapshotname = varargin{i};     case 'snapshotinterval',i=i+1; snapshotinterval = varargin{i};     case {'sTrain','train','som_train'}, i=i+1; sTrain = varargin{i};     case {'topol','sTopol','som_topol'},       i=i+1;       sTopol = varargin{i};      if prod(sTopol.msize) ~= munits,         error('Given map grid size does not match the codebook size.');      end      % unambiguous values     case {'inv','linear'}, sTrain.alpha_type = varargin{i};      case {'hexa','rect'}, sTopol.lattice = varargin{i};     case {'gaussian','bubble'}, sTrain.neigh = varargin{i};     case {'epochs','samples'}, tlen_type = varargin{i};     otherwise argok=0;     end  elseif isstruct(varargin{i}) & isfield(varargin{i},'type'),     switch varargin{i}(1).type,      case 'som_topol',       sTopol = varargin{i};       if prod(sTopol.msize) ~= munits,         error('Given map grid size does not match the codebook size.');      end     case 'som_train', sTrain = varargin{i};     otherwise argok=0;     end  else    argok = 0;   end  if ~argok,     disp(['(som_sompaktrain) Ignoring invalid argument #' num2str(i+2)]);   end  i = i+1; end% check topologyif struct_mode,   if ~strcmp(sTopol.lattice,sMap.topol.lattice) | ...	~strcmp(sTopol.shape,sMap.topol.shape) | ...	any(sTopol.msize ~= sMap.topol.msize),     warning('Changing the original map topology.');  endendsMap.topol = sTopol; % complement the training structif ~isnan(dlen),   sTrain = som_train_struct(sTrain,sMap,'dlen',dlen);else  sTrain = som_train_struct(sTrain,sMap); endif isempty(sTrain.mask), sTrain.mask = ones(dim,1); end% training lengthif strcmp(tlen_type,'epochs'),   if isnan(dlen),       error('Training length given as epochs, but data length is not known.\n');  else    rlen = sTrain.trainlen*dlen;  endelse  rlen = sTrain.trainlen;  sTrain.trainlen = sTrain.trainlen/dlen;   end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% check arguments% maskif any(sTrain.mask~=1),   sTrain.mask = ones(dim,1);   fprintf(1,'Ignoring given mask.\n');end% learning rateif strcmp(sTrain.alpha_type,'power'),   sTrain.alpha_type = 'inv';  fprintf(1,'Using ''inv'' learning rate type instead of ''power''\n');end  % neighborhoodif any(strcmp(sTrain.neigh,{'cutgauss','ep'})),   fprintf(1,'Using ''gaussian'' neighborhood function instead of %s.\n',sTrain.neigh);  sTrain.neigh = 'gaussian'; end% map shapeif ~strcmp(sMap.topol.shape,'sheet'),   fprintf(1,'Using ''sheet'' map shape of %s.\n',sMap.topol.shape);  sMap.topol.shape = 'sheet'; end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Action% write filesif ~isempty(givendatafile),   temp_din = givendatafile; else   temp_din = tempname;   som_write_data(D, temp_din, 'x')endtemp_cin  = tempname;som_write_cod(sMap, temp_cin)temp_cout = tempname;% check if the environment variable 'SOM_PAKDIR' has been definedif any(strcmp('SOM_PAKDIR', evalin('base', 'who')))  som_pak_dir = evalin('base', 'SOM_PAKDIR');else  som_pak_dir = '';endif ~isempty(som_pak_dir) & ~strncmp(som_pak_dir(end), '/', 1)  som_pak_dir(end + 1) = '/';endaini  = sTrain.alpha_ini; atype = sTrain.alpha_type;if strcmp(atype,'inv'), atype = 'inverse_t'; endrad   = sTrain.radius_ini;str = [som_pak_dir 'vsom ' ...       sprintf('-cin %s -din %s -cout %s', temp_cin, temp_din, temp_cout) ...       sprintf(' -rlen %d -alpha %g -alpha_type %s', rlen, aini, atype) ...       sprintf(' -radius %g -rand %g ',rad,random_seed)];if ~isempty(snapshotname) & snapinterval>0,   str = [str, sprintf(' -snapfile %s -snapinterval %d',snapshotname,snapshotinterval)];endfprintf(1,'Execute: %s\n',str);if isunix,   [status,w] = unix(str);   if status, fprintf(1,'Execution failed.\n'); end  if ~isempty(w), fprintf(1,'%s\n',w); endelse   [status,w] = dos(str);   if status, fprintf(1,'Execution failed.\n'); end  if ~isempty(w), fprintf(1,'%s\n',w); endendsMap_temp = som_read_cod(temp_cout);M = sMap_temp.codebook;if isunix  unix(['/bin/rm -f ' temp_din ' ' temp_cin ' ' temp_cout]);else  dos(['del ' temp_din ' ' temp_cin ' ' temp_cout]);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Build / clean up the return arguments% update structuressTrain = som_set(sTrain,'time',datestr(now,0));if struct_mode,   sMap = som_set(sMap,'codebook',M,'mask',sTrain.mask,'neigh',sTrain.neigh);  tl = length(sMap.trainhist);  sMap.trainhist(tl+1) = sTrain;else  sMap = reshape(M,orig_size);endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -