I bought for myself a new laptop, a used IBM Thinkpad, and discovered
that the error backpropagation program is so big, that it will exceed
the capabilities of the 32-bit Linux Ruby system.
The attempt to load the backpropagation program with the 32-bit Linux
Ruby will crash the Ruby system at a stack overflow, as seen below.
The backpropagation program will load with the CL Shen, and it will
load with the 64-bit Linux Shen Ruby.
This made me think that maybe the "mystical" error I discussed, might
be caused by too heavily straining the capabilities of the underlying
language or hardware systems, on which ones the backpropagation
program has been constructed.
I'm essentially sure that the OS Shen system is perfectly OK and must
not be blamed.
------------------------------------------------------------
antti@antti-ThinkPad-T43:~/pctronm$ srrepl
Loading.... Completed in 8.86 seconds.
Shen, copyright (C) 2010-2015 Mark Tarver
running under Ruby, implementation: ruby 1.9.3
port 0.15.1 ported by Greg Spurrier
(0-) (tc +)
true
(1+) (load "maths-lib1.shen")
sign : (number --> number)
abs : (number --> number)
floor : (number --> number)
maths.floor-pos : (number --> number)
maths.floor-neg : (number --> number)
maths.floor-h : (number --> (number --> (number --> number)))
ceiling : (number --> number)
trunc : (number --> number)
maths-round0 : (number --> number)
maths.round-down? : (number --> boolean)
int-part : (number --> number)
frac-part : (number --> number)
modf : (number --> (number * number))
maths-round' : (number --> (number --> number))
maths.pow-2 : (number --> (number --> number))
fmod : (number --> (number --> number))
frexp : (number --> (number * number))
maths.frexp-neg : (number --> (number * number))
maths.frexp-pos : (number --> (number * number))
maths.mult-2 : (number --> (number --> (number * number)))
maths.div-2 : (number --> (number --> (number * number)))
ldexp : (number --> (number --> number))
square : (number --> number)
maths.power-pos : (number --> (number --> number))
power : (number --> (number --> number))
maths.type#global : symbol
1.0e-15 : number
2.7182818284590455 : number
2.302585092994046 : number
0.6931471805599454 : number
3.141592653589793 : number
1.5707963267948966 : number
0.7853981633974484 : number
6.283185307179586 : number
0.31830988618379075 : number
0.6366197723675814 : number
1.4426950408889634 : number
0.43429448190325187 : number
1.4142135623730951 : number
0.7071067811865476 : number
1.1283791670955126 : number
0.017453292519943295 : number
57.29577951308232 : number
maths.small-enough? : (number --> boolean)
rad->degs : (number --> number)
degs->rad : (number --> number)
dms->degs : ((list number) --> number)
maths.dms->degs-pos : ((list number) --> number)
degs->dms : (number --> (list number))
maths.range-ok? : (number --> boolean)
exp : (number --> number)
maths.exp-large : (number --> number)
maths.exp-h : (number --> number)
maths.exp-sum : (number --> (number --> (number --> (number --> number))))
sinh : (number --> number)
cosh : (number --> number)
tanh : (number --> number)
expt : (number --> (number --> number))
sqrt : (number --> number)
maths.sqrt-scale : (number --> (number --> number))
maths.sqrt-h : (number --> number)
maths.sqrt-iter : (number --> (number --> (number --> number)))
maths.mean : (number --> (number --> number))
log : (number --> number)
maths.log-scale : (number --> (number --> number))
maths.log-h : (number --> number)
maths.log-sum : (number --> (number --> (number --> (number --> number))))
log10 : (number --> number)
log2 : (number --> number)
log' : (number --> (number --> number))
sin : (number --> number)
maths.sin-h : (number --> number)
maths.sin-sum : (number --> (number --> (number --> (number --> (number --> number)))))
cos : (number --> number)
tan : (number --> number)
asin : (number --> number)
maths.asin-h : (number --> number)
maths.asin-sum : (number --> (number --> (number --> (number --> number))))
acos : (number --> number)
atan : (number --> number)
maths.atan-h : (number --> number)
maths.atan-sum : (number --> (number --> (number --> (number --> (number --> number)))))
maths.atan-lt1 : (number --> number)
maths.atan-gt1 : (number --> number)
maths.atan-transf : (number --> number)
atan2 : (number --> (number --> number))
even? : (number --> boolean)
odd? : (number --> boolean)
natural? : (number --> boolean)
positive? : (number --> boolean)
negative? : (number --> boolean)
zero? : (number --> boolean)
maths.rsh : (number --> number)
maths.rsh-h : (number --> (number --> number))
maths./-pos : (number --> (number --> (number * number)))
maths.div-w : (number --> (number --> (number --> (number --> (number * number)))))
maths.pow-2div : (number --> (number --> (number --> number)))
divisible-by? : (number --> (number --> boolean))
maths.mod-pos : (number --> (number --> number))
maths.div-ww : (number --> (number --> (number --> number)))
/mod : (number --> (number --> (number * number)))
maths./mod-h : (number --> (number --> (number --> (number --> (number --> (number * number))))))
div : (number --> (number --> number))
maths.div-h : (number --> (number --> (number --> (number --> number))))
mod : (number --> (number --> number))
maths.mod-h : (number --> (number --> (number --> (number --> number))))
/rem : (number --> (number --> (number * number)))
maths./rem-h : (number --> (number --> (number --> (number --> (number * number)))))
trunc-div : (number --> (number --> number))
rem : (number --> (number --> number))
/% : (number --> (number --> (number * number)))
maths./%-h : (number --> (number --> (number --> (number --> (number --> (number * number))))))
div-eucl : (number --> (number --> number))
maths.adjust-Q : (number --> (number --> (number --> number)))
% : (number --> (number --> number))
gcd : (number --> (number --> number))
lcm : (number --> (number --> number))
!= : (A --> (A --> boolean))
max : (number --> (number --> number))
min : (number --> (number --> number))
run time: 28.3385009765625 secs
typechecked in 30115 inferences
loaded : symbol
(2+) (load "pctronml.shen")
type#pctron : symbol
make-pctron : (string --> (string --> ((list (number * string)) --> ((list (number * string)) --> ((list (number * string)) --> ((list (number * string)) --> (number --> (number --> (number --> ((list string) --> pctron))))))))))
pctronNeuronName : (pctron --> string)
pctronDocumentation : (pctron --> string)
pctronInputs : (pctron --> (list (number * string)))
pctronWeights : (pctron --> (list (number * string)))
pctronDeltas : (pctron --> (list (number * string)))
pctronSumDeltas : (pctron --> (list (number * string)))
pctronActivationLevel : (pctron --> number)
pctronNeuronOutput : (pctron --> number)
pctronBeta : (pctron --> number)
pctronOutputs : (pctron --> (list string))
setNeuronName : (pctron --> (string --> pctron))
setDocumentation : (pctron --> (string --> pctron))
setInputs : (pctron --> ((list (number * string)) --> pctron))
setWeights : (pctron --> ((list (number * string)) --> pctron))
setDeltas : (pctron --> ((list (number * string)) --> pctron))
setSumDeltas : (pctron --> ((list (number * string)) --> pctron))
setActivationLevel : (pctron --> (number --> pctron))
setNeuronOutput : (pctron --> (number --> pctron))
setBeta : (pctron --> (number --> pctron))
setOutputs : (pctron --> ((list string) --> pctron))
type#params : symbol
0.2 : number
2.0 : number
0.1 : number
type#oblist : symbol
[] : (list pctron)
add-neuron-to-oblist : (pctron --> (list A))
type#neurons-levels : symbol
[[]] : (list (list pctron))
subst-o : (pctron --> (list A))
subst-o-h : (pctron --> ((list pctron) --> (list pctron)))
subst-n : (pctron --> (list A))
subst-strata : (pctron --> ((list (list pctron)) --> (list (list pctron))))
subst-stratum : (pctron --> ((list pctron) --> (list pctron)))
subst-pctron : (pctron --> (pctron --> pctron))
update-neuron : (pctron --> (list A))
transfer-function : (pctron --> pctron)
last : ((list A) --> A)
activation-level : (pctron --> number)
activation-level-h : ((list (number * string)) --> ((list (number * string)) --> (number --> number)))
threshold : (number --> number)
fire-synapses : (pctron --> (list A))
fire-synapses-h : (pctron --> (number --> ((list string) --> (list A))))
fire-synapse-aux : (pctron --> (number --> (pctron --> (list A))))
update-inputs : ((list (number * string)) --> (pctron --> ((number * string) --> (pctron --> (list (number * string))))))
update-pair : ((number * string) --> (pctron --> ((number * string) --> (pctron --> (number * string)))))
find-neuron : (string --> pctron)
find-neuron-h : (string --> ((list pctron) --> pctron))
type#neurons : symbol
["H1" "Neuron H1, (Winston, 1992)" [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] 0.2 0.2 0.1 ["A" "S"]] : pctron
["H2" "Neuron H2, (Winston, 1992)" [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 0.55 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] [(@p 0.55 "1") (@p 0.55 "2") (@p 0.55 "3") (@p 1.0 "bias")] 0.2 0.2 0.1 ["A" "S"]] : pctron
["A" "Neuron Acquaintances, (Winston, 1992)" [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 1.0 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] 0.2 0.2 0.1 []] : pctron
["S" "Neuron Siblings, (Winston, 1992)" [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 1.0 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] [(@p 0.6600000000000001 "H1") (@p 0.6600000000000001 "H2") (@p 0.2 "bias")] 0.2 0.2 0.1 []] : pctron
type#training-samples : symbol
record-samples : ((list (list (list number))) --> (list A))
[] : (list A)
[] : (list A)
[] : (list A)
[] : (list A)
[] : (list A)
init-layers : (--> (list A))
append-layers : ((list pctron) --> (list A))
[] : (list A)
[] : (list A)
[] : (list A)
bpropm : (number --> (list A))
bpropm-aux : (number --> (number --> (list A)))
bpropm-iterate : (--> (list A))
bpropm-iterate1 : ((list (list (list number))) --> (list A))
butlast : ((list A) --> (list A))
assign-inputs : ((list (list number)) --> (list A))
updateAssign : ((list pctron) --> ((list (list number)) --> (list A)))
modify-inputs : (pctron --> ((list number) --> (list (number * string))))
modify-inputs-h : ((list (number * string)) --> ((list number) --> (list (number * string))))
launch-ann : (--> (list A))
launch-ann-h : ((list (list pctron)) --> (list A))
launch-stratum : ((list pctron) --> (list A))
beta-output-layer : ((list (list number)) --> (list A))
last-stratum : ((list (list pctron)) --> (list pctron))
last-sublist : ((list (list number)) --> (list number))
beta-output-layer-aux : ((list pctron) --> ((list number) --> (list A)))
beta-layers : (--> (list A))
beta-layers-h : ((list (list pctron)) --> (number --> (list A)))
beta-stratum : ((list pctron) --> (list A))
beta-neuron : (pctron --> (list A))
beta-sum : (pctron --> ((list string) --> number))
beta-sum-h : (pctron --> ((list string) --> (number --> number)))
find-weight : (pctron --> (string --> number))
find-weight-h : ((list (number * string)) --> (string --> number))
deltas-1st : ((list (list number)) --> (list A))
iterate-1st-stratum : ((list pctron) --> ((list (list number)) --> (list A)))
deltas-1st-pctron : (pctron --> ((list number) --> (list A)))
deltas-1st-aux : ((list (number * string)) --> ((list number) --> (number --> (number --> (number --> (number --> (number --> (list (number * string)))))))))
deltas-2nd : (--> (list A))
iterate-2-n-strata : ((list (list pctron)) --> (list A))
iterate-2-n-stratum : ((list pctron) --> (list A))
find-d : ((list (number * string)) --> (number --> number))
deltas-2-n-pctron : (pctron --> (list A))
deltas-2nd-aux : ((list (number * string)) --> ((list (number * string)) --> (number --> (number --> (number --> (number --> (number --> (list (number * string)))))))))
find-1 : ((list (number * string)) --> (number --> (number * string)))
zero-weight-changes : (--> (list A))
zero-weight-changes-aux : ((list pctron) --> (list A))
zero-weight-changes-pctron : (pctron --> pctron)
null-changes : ((list (number * string)) --> (list (number * string)))
add-up-weight-changes : (--> (list A))
add-up-aux : ((list pctron) --> (list A))
add-up-pctron : (pctron --> (list A))
sumDeltas1 : ((list (number * string)) --> ((list (number * string)) --> (list (number * string))))
sumDeltas-aux : ((list (number * string)) --> ((list (number * string)) --> ((list (number * string)) --> (list (number * string)))))
subst-n-s : ((list (number * string)) --> ((number * string) --> (list (number * string))))
find-s : ((list (number * string)) --> (string --> number))
change-weights : (--> (list A))
change-weights-aux : ((list pctron) --> (list A))
change-weights-pctron : (pctron --> (list A))
sumIntoWeights : ((list (number * string)) --> ((list (number * string)) --> (list (number * string))))
sumIntoWeights-aux : ((list (number * string)) --> ((list (number * string)) --> ((list (number * string)) --> (list (number * string)))))
Stack overflow
(3+)
------------------------------------------------------------
yours, Dr A. J. Y.
HELSINKI
Finland, the E.U.