Re: Hinton diagrams
- To: mathgroup at smc.vnet.net
- Subject: [mg63071] Re: Hinton diagrams
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Tue, 13 Dec 2005 03:40:53 -0500 (EST)
- Organization: The Open University, Milton Keynes, UK
- References: <dnir4e$9ua$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
hans.sjunnesson at gmail.com wrote: > I have created a neural network using the Fast Artificial Neural > Networks package for Mathematica. > In the end the weights of the finished network is represented thusly: > > {{1, 8, -0.0354672}, {2, 8, 0.719431}, {3, 8, 0.538668}, {4, 8, > 0.617062}, {5, > 8, 2.69463}, {6, 8, 1.32144}, {7, 8, -0.386639}, {1, 9, 1.03297}, > {2, > 9, 0.655591}, {3, 9, 0.806346}, {4, > 9, 0.632072}, {5, 9, 0.55292}, {6, 9, > 0.599058}, {7, 9, 1.0424}, {1, 10, -1.64471}, {2, 10, 2.62318}, {3, > 10, 1.51706}, {4, 10, 1.68971}, {5, 10, 0.899632}, {6, 10, > -1.15408}, { > 7, 10, -0.157527}, {1, 11, -0.186235}, {2, 11, 1.39747}, {3, 11, > 1.89406}, { > 4, 11, -0.434147}, {5, 11, -1.88703}, {6, > 11, 2.23624}, {7, 11, -3.17978}, {8, 13, 1.83855}, {9, 13, > -0.912118}, { > 10, 13, 4.37321}, {11, 13, 3.82373}, {12, 13, -5.73714}} > > I looks quite messy, but it's fairly simple - the weight of the > connection from unit 1 to unit 8 is -0.0354672, the connection from 2 > to 8 is 0.719431 and so forth. > > Units 1 to 7 represents the first layer, units 8 to 12 the hidden > middle layer and unit 13 is the single output layer. > > A Hinton diagram is a matrix of squares. The squares' size represents > the magnitude of the weight, and the color is the weight's sign. > There's a screenshot here http://www.nd.com/products/nsv30/hinton.htm > > I would like to create two Hinton diagrams from this data. One for the > weights from the first to the second layer, and one for the weights > from the second to the third layer. > > Has anyone done something similar, or can propose a solution to this? > I'd very much appreciate it. > Hi Hans, The following function should do more or less what you are looking for. At least, I believe it is a good starting point. plotHinton[l_List, p_Integer, q_Integer] := Module[{data, maxWeight, xmin, xmax, ymin, ymax}, data = Select[l, p <= #1[[1]] <= q & ]; maxWeight = Max[Abs[data[[All,3]]]]; xmin = Min[data[[All,1]]] - 1; xmax = Max[data[[All,1]]] + 1; ymin = Min[data[[All,2]]] - 1; ymax = Max[data[[All,2]]] + 1; hinton[pt_] := Module[{wg, gl, scale, px, py}, wg = pt[[3]]; gl = If[Sign[wg] > 0, 0, 0.8]; wg = Abs[wg]; scale = wg/maxWeight; px = {pt[[1]], pt[[2]]} - {scale, scale}/2; py = {pt[[1]], pt[[2]]} + {scale, scale}/2; Graphics[{GrayLevel[gl], Rectangle[px, py]}] ]; Show[hinton /@ data, Frame -> True, AspectRatio -> Automatic, PlotRange -> {{xmin, xmax}, {ymin, ymax}}, ImageSize -> 500, FrameTicks -> {Range[xmin, xmax], Range[ymin, ymax], None, None}] ] Now we try it with your data In[2]:= data={{1,8,-0.0354672},{2,8,0.719431},{3,8,0.538668},{4, 8,0.617062},{5,8,2.69463},{6,8,1.32144},{7,8,-0.386639},{1, 9,1.03297},{2,9,0.655591},{3,9,0.806346},{4,9,0.632072},{5, 9,0.55292},{6,9,0.599058},{7,9,1.0424},{1,10,-1.64471},{ 2,10,2.62318},{3,10,1.51706},{4,10,1.68971},{5,10,0.899632},{ 6,10,-1.15408},{7,10,-0.157527},{1,11,-0.186235},{ 2,11,1.39747},{3,11,1.89406},{4,11,-0.434147},{5,11,-1.88703},{6,11, 2.23624},{7,11,-3.17978},{8,13,1.83855},{9,13,-0.912118},{10, 13,4.37321},{11,13,3.82373},{12,13,-5.73714}}; In[3]:= plotHinton[data,1,7]; plotHinton[data, 8, 12]; Hope this helps, /J.M.