global { iter 0 areas 1 mult 1 d "/tmp/coco" } all { /**default area size**/ d_a 4 d_b 14 } /**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 0 to rlen. Initialization: Only at the beginning (time 0), 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 o or s, at each time all neurons are updated, no need for {R;feed_copy;;;-1}. If order is r, 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. **/ set rlen 15 set epsW 0.1 set epsWtimesdecW 0.0001 series (1) { sw (0; 1; alltime) { 0(n) {N,w; weight_list_alloc_full; ; ; -0.1+0.1} } sw (0; 1; order) { 0(o) {N,w; weight_list_cutself ; ; ; } } } series (200000) { /**presentation of the data**/ sw (0; $rlen; alltime) { 0(n) {T ; data_gauss_move ; ; ; 1, 1.0, 1.18, 1.0+-1.0} /**<-- upper "hill" moves 1 pixel to the right at each time step**/ } /*new sigma height upper,lower velocity*/ sw (0; $rlen; order) { 0(o) {T ; local_sum_const ; , ; , ; 0.02 } } /**initialisation**/ sw (0; 1; order) { 0(o) {R ; local_copy ; , ; T, ; } /**copy the data from T to activations R (once only at time 0)**/ {N,w; weight_list_decay; ; ; $epsWtimesdecW} } /**relaxation**/ sw (1; $rlen; order) { 0(o) {R ; single_copy ; ; ; -1 } /**only necessary, if order of next stay is r, for the not-updated neurons**/ 0(o) {R,w; weight_list_feed ; ; ; -1 } /**fan-in into the neurons the activations from -1 time step before**/ 0(o) {R ; local_mean_01 ; , ; , ; 50+1+0+0+1} /**logistic sigmoid transfer function, thus continuous rate coding neurons**/ } /**learning**/ sw (1; $rlen; order) { 0(o) {S ; local_sub ; , ; T, R; } /**post-synaptic term for the Hebb rule: target T - activation R**/ {L ; single_copy ; ; R ; -1 } /**pre -synaptic term for the Hebb rule: activation -1 time step before**/ 0(o) {N,w; weight_list_hebb ; , ; S, L; $epsW} } if (iter % 3000) sw (0; 1; order) { if (iter < 100000) 0(o) {N,w; weight_list_cutsmall; ; ; 0, 0.1+0.1} } /**write to files**/ if (iter % 500) sw (0; $rlen; alltime) { 0(n) {T,d; observe_act; ; ; } /**data**/ 0(n) {R,d; observe_act; ; ; } /**neuronal activations**/ 0(n) {S,d; observe_act; ; ; } /**difference S=T-R**/ 0(n) {N,w+d; weight_list_export; ; ; } /**ignores $rlen**/ } }