setObject <object> [<value>]
Lens makes many of the network's and example sets' underlying C
structures accessible to the user's Tcl shell interface. While normal
Tcl variables are changed using the set
command and dereferenced using $
, fields of internal Lens
objects are set using the setObject command and retrieved using getObject.
Objects, sub-objects, and their fields are referenced using a notation
similar to C. The fields of the current network are referred to
directly. For example "learningRate
" is the network's
learning rate. Fields of child objects are referenced with the name of
the child object, followed by a period and the name of the field. For
example, the number of examples in the current training set (which is a
child object of the current network), is referred to with
"trainingSet.exampleNum
".
As in Tcl, elements of arrays are referenced using the array name
followed by the element number in parentheses, e.g.
"group(3).unit(99).outputHistory(2)
". It is also possible
to use square brackets instead of parentheses, more in keeping with C.
However, this is less convenient because Tcl interprets anything in
square brackets as a command to be executed. The brackets must be
"escaped" to prevent this. References such as:
group\[$i\].unit\[[expr $j - 2]\].output
are more easily written as:
group($i).unit([expr $j - 2]).output
Elements in two dimensional arrays should be accessed using
"(i,j)
" format rather than "[i][j]
", although
"(i)(j)
" is acceptable.
The setObject
command takes an object name and an optional
value. With no value, setObject
simply calls getObject, returning the current value of the
field or object. If a value is given, the field will be set to the
specified value and the value returned.
Only simple fields, such as integers, reals, flags (booleans), masks (integers treated as bitmasks), strings, and Tcl commands, may be set. Container objects may not be set, nor may certain fields, such as the number of groups in the network, that are write-protected.
As a shortcut, you can access networks, groups, units, and example sets directly by name. If the name contains a ".", it will be interpreted as a field separator and this will not work. Therefore, it is recommended that networks, groups, units, and example sets don't use ".".
To set the weight of one of the links to 1.0:
lens> setObject group(2).unit(9).incoming(3).weight 1.2340 1.234Or if
group(2)
were named "hidden", you could probably do:
lens> setObject hidden:9.incoming(3).weight 1.2340 1.234To retrieve that value:
lens> setObj hidden:9.incoming(3).weight 1.234