Content-Type: text/enriched Text-Width: 70 global { iter 0 areas 1 mult 1 <x-color><param>blue</param>d "/tmp/coco"</x-color> } all { <x-color><param>DimGrey</param>/**default area size**/</x-color> d_a 4 d_b 14 } <x-color><param>DimGrey</param>/**This file implements a one-layer associator network with continuos neurons. At each instant of the series, the following is done: Presentation: Data are written to the variable T over the whole relaxation time length, i.e. from </x-color><x-color><param>red</param>0</x-color><x-color><param>DimGrey</param> to </x-color><x-color><param>red</param>rlen</x-color><x-color><param>DimGrey</param>. Initialization: Only at the beginning (time </x-color><x-color><param>red</param>0</x-color><x-color><param>DimGrey</param>), the network activations R are initialized with the data. Relaxation: The network activations R develop freely (NO influence by the data!). Note: if order of second stay is </x-color><x-bg-color><param>Pink</param>o</x-bg-color><x-color><param>DimGrey</param> or </x-color><x-bg-color><param>Pink</param>s</x-bg-color><x-color><param>DimGrey</param>, at each time all neurons are updated, no need for {R;feed_copy;;;-1}. If order is </x-color><x-bg-color><param>Pink</param>r</x-bg-color><x-color><param>DimGrey</param>, then some neurons may not be updated, so first use {R;feed_copy;;;-1} to take over activations! Learning: Only now, the activations R are again compared to the data T. A difference rule moulds the weights so that the activations of the network shall develop like the data. Write out: Ater every 100 iterations (argument to series), an example relaxation (T and R; also weights) will be exported. The patterns which have to be memorized are produced in data_gauss_move. See what it does in the file src/data.made.c. **/</x-color> <x-color><param>red</param>set rlen 15</x-color> <x-color><param>DarkGreen</param>set epsW 0.1</x-color> <x-color><param>DarkGreen</param>set epsWtimesdecW 0.0001</x-color> series (1) { sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) { <x-color><param>DarkGreen</param>0(n) {N,w; weight_list_alloc_full; ; ; -0.1+0.1}</x-color> } sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; order) { <x-color><param>DarkGreen</param>0(o) {N,w; weight_list_cutself ; ; ; }</x-color> } } series (200000) { <x-color><param>DimGrey</param>/**presentation of the data**/</x-color> sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>$rlen</x-color>; alltime) { 0(n) {T ; data_gauss_move ; ; ; 1, 1.0, 1.18, 1.0+-1.0} <x-color><param>DimGrey</param>/**<<-- upper "hill" moves 1 pixel to the right at each time step**/</x-color> } <x-color><param>DimGrey</param>/*new sigma height upper,lower velocity*/</x-color> sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>$rlen</x-color>; order) { 0(o) {T ; local_sum_const ; , ; , ; 0.02 } } <x-color><param>DimGrey</param>/**initialisation**/</x-color> sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; order) { 0(o) {R ; local_copy ; , ; T, ; } <x-color><param>DimGrey</param>/**copy the data from T to activations R (once only at time </x-color><x-color><param>red</param>0</x-color><x-color><param>DimGrey</param>)**/</x-color> <x-color><param>DarkGreen</param>{N,w; weight_list_decay; ; ; $epsWtimesdecW}</x-color> } <x-color><param>DimGrey</param>/**relaxation**/</x-color> sw (<x-color><param>red</param>1</x-color>; <x-color><param>red</param>$rlen</x-color>; order) { 0(o) {R ; single_copy ; ; ; <x-color><param>red</param>-1</x-color> } <x-color><param>DimGrey</param>/**only necessary, if order of next stay is </x-color><x-bg-color><param>Pink</param>r</x-bg-color><x-color><param>DimGrey</param>, for the not-updated neurons**/</x-color> 0(<x-bg-color><param>Pink</param>o</x-bg-color>) {R,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed ; ; ; <x-color><param>red</param>-1</x-color> } <x-color><param>DimGrey</param>/**fan-in into the neurons the activations from </x-color><x-color><param>red</param>-1</x-color><x-color><param>DimGrey</param> time step before**/</x-color> 0(<x-bg-color><param>Pink</param>o</x-bg-color>) {R ; local_mean_01 ; , ; , ; 50+1+0+0+1} <x-color><param>DimGrey</param>/**logistic sigmoid transfer function, thus continuous rate coding neurons**/</x-color> } <x-color><param>DimGrey</param>/**learning**/</x-color> sw (<x-color><param>red</param>1</x-color>; <x-color><param>red</param>$rlen</x-color>; order) { 0(o) {S ; local_sub ; , ; T, R; } <x-color><param>DimGrey</param>/**post-synaptic term for the Hebb rule: target T - activation R**/</x-color> {L ; single_copy ; ; R ; <x-color><param>red</param>-1</x-color> } <x-color><param>DimGrey</param>/**pre -synaptic term for the Hebb rule: activation </x-color><x-color><param>red</param>-1</x-color><x-color><param>DimGrey</param> time step before**/</x-color> <x-color><param>DarkGreen</param> 0(o) {N,w; weight_list_hebb ; , ; S, L; $epsW}</x-color> } if (iter % 3000) sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; order) { if (iter << 100000) <x-color><param>DarkGreen</param>0(o) {N,w; weight_list_cutsmall; ; ; 0, 0.1+0.1}</x-color> } <x-color><param>DimGrey</param>/**write to files**/</x-color> if (iter % 500) sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>$rlen</x-color>; alltime) { 0(n) {T,<x-color><param>blue</param>d</x-color>; observe_act; ; ; } <x-color><param>DimGrey</param>/**data**/</x-color> 0(n) {R,<x-color><param>blue</param>d</x-color>; observe_act; ; ; } <x-color><param>DimGrey</param>/**neuronal activations**/</x-color> 0(n) {S,<x-color><param>blue</param>d</x-color>; observe_act; ; ; } <x-color><param>DimGrey</param>/**difference S=T-R**/</x-color> 0(n) {N,<x-color><param>DarkGreen</param>w</x-color>+<x-color><param>blue</param>d</x-color>; weight_list_export; ; ; } <x-color><param>DimGrey</param>/**ignores $rlen**/</x-color> } }