Re: Hinton diagrams

*To*: mathgroup at smc.vnet.net*Subject*: [mg63166] Re: [mg63052] Hinton diagrams*From*: Sseziwa Mukasa <mukasa at jeol.com>*Date*: Fri, 16 Dec 2005 07:22:22 -0500 (EST)*References*: <200512120325.WAA10001@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On Dec 11, 2005, at 10:25 PM, 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. I've never done anything similar but here is my attempt Options[hinton]={AspectRatio->1,Background->GrayLevel[0.5], colorFunction->GrayLevel[UnitStep[#]]&}; hinton[data_,from_List,to_List,opts___?OptionsQ]:= Block[{aspectratio,background, colorfunction},{aspectratio,background, colorfunction}={AspectRatio,Background, colorFunction}/.{opts}/.Options[hinton]; GraphicsArray[ Prepend[MapThread[{#1, Sequence@@#2}&,{Graphics[{Text[#,{0,0}]}, Background->background,AspectRatio->aspectratio]&/@ to,Partition[ Block[{d=Select[data,MemberQ[from,#[[1]]]&&MemberQ[to,# [[2]]]&], m},m=Max[Abs[d[[All,3]]]]; With[{mag=#[[3]]/m, bottomleft=Table[0.5 (1-Abs[#[[3]]/m]),{2}], topright=Table[0.5 (1+Abs[#[[3]]/m]),{2}]}, Graphics[{colorfunction[mag], Rectangle[Scaled[bottomleft],Scaled [topright]]}, Background->background, AspectRatio->aspectratio]]&/@d],Length [from]]}], Graphics[{Text[#,{0,0}]},Background->background, AspectRatio->aspectratio]&/@Prepend[from," "]], GraphicsSpacing->0]] It seems from your data that there are no connections between the first layer and unit 12, is this what the diagram is supposed to demonstrate? If so my code won't work, although you can easily test for that case by seeing if MemberQ[Select[data,MemberQ[<layer>,#[[1]]] &][[All,2]],unit] is true, where <layer> is the list of units in a layer and add appropriate entries for 0 weight connections to the data. At any rate to use my function with your data, the following expressions return the Hinton diagrams for the first and second layers respectively: Show[hinton[Join[data,Table[{i,12,0},{i,7}]],Range[7],Range[8,12]]]; Show[hinton[Join[data,Table[{i,12,0},{i,7}]],Range[8,12],{13}]]; I added options to hinton to allow for different coloring functions based on magnitude (colorfunction->Graylevel[UnitStep[#]]& is the default) and different aspect ratios and background colors. Regards, Ssezi

**References**:**Hinton diagrams***From:*hans.sjunnesson@gmail.com