- If the data is one-dimensional (and thus, the weights are one-dimensional), the x-coordinate of the weight positions are taken from the only column of the weight matrix, the y-coordinate is 0 and the z-coordinate is set to 1.
- If the data is two-dimensional, the x-coordinate and y-coordinates are taken from the two columns of the weight matrix and the z-coordinate is set to 1.
- If the data is three-dimensional, the x-, y- and z-coordinates are taken from the three columns of the weight matrix.
- For higher dimensional data, the x- and y-coordinates are taken from the first two columns of the weight matrix and the z-coordinate is set to 1.
How to get neurons positions from net
5 ビュー (過去 30 日間)
古いコメントを表示
Hey, I have trained many times a som network (neural net clustering), to find clusters from data(green points), and I got this plot.
The code I used to train 10 times the same neuronal network to see different results was:
h = genvarname({'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1', 'trainALL1'});
for i = 11:20
x = transpose(AmplitudTemperaturaPeso);
net = selforgmap([25,25],100,3,'hextop','linkdist');
net = train(net,x);
%view(net)
y = net(x);
classes = vec2ind(y);
figure(i), plotsompos(net,x), daspect auto;
saveas(figure(i),genvarname(h{i-10}),'fig')
close all
end
My question is How can I get the position of each neuron in the space (x,y,z) ? (using commands)
I got it manipulating the plot (View> Plot Browser show only the neurons and Tool>Brush I select the neurons and clicking rigth button, I select cretate a new variable), but I want to automate the process, so I want a way to do it with commands.
I supose that the solution will be manipulating the variable net, but I don't know how to do it.
Thank you very much!!
0 件のコメント
回答 (1 件)
Malay Agarwal
2024 年 2 月 23 日
編集済み: Malay Agarwal
2024 年 2 月 23 日
Hi Jorge,
I understand that you want the (x, y, z) coordinates of each neuron as they appear in the plot generated by “plotsompos”.
The weights of the SOM network are stored in the property “IW” as a cell array. You can execute the following to access the property:
net.IW
The (x, y, z) coordinates of each neuron are taken directly from the weight matrix, depending on the dimensionality of the data:
The above behaviour is not documented but can be verified. For example, considering the case of one-dimensional data:
% Create one-dimensional dataset
angles = 0:0.5*pi/99:0.5*pi;
X = sin(angles);
% Create the net
net = selforgmap(10);
% Train the net for 10 epochs
net.trainParam.epochs = 10;
net = train(net, X);
% Plot the net
% TODO: Brush the data from the plot and store it in a variable called brushedData
plotsompos(net, X);
Now you can confirm the above behaviour as follows:
% Check x-coordinate matches first column of weight matrix
all(brushedData(:, 1) == net.IW{1}(:, 1))
% Check y-coordinate is 0
all(brushedData(:, 2) == 0)
% Check z-coordinate is 1
all(brushedData(:, 3) == 1)
All the “all” function calls return "logical" 1, which is the expected behaviour for one-dimensional data.
In your case, assuming the data is three-dimensional, the coordinates can be obtained as follows:
neuronCoords = net.IW{1}(:, [1 2 3]);
Hope this helps!
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Neural Simulation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!