Miscellanea: Version Notes
- The BIAS_CLAMP output function now sets the units' output to the
initOutput, rather than 1.0. The default initOutput for BIAS groups
is still 1.0, but this allows you to change the bias value.
- Fixed a bug that occurred when a lot of group names are used in an
example file (thanks to Richard Thompson).
- Added protections to prevent changing to an example set while it is
loading (also thanks to Richard Thompson).
- Added the UNLESIONED projection type to the connectGroups command.
- Added the -r flag to the test
command to allow it to return the results instead of printing them
(added parameters to the reportError and netTestBatch commands).
- Added adaptive gains for TANH units.
- Worked around some compile bugs affecting binary files.
- Added copy*Extension() functions to extension.c and extension.h for
customized copying of extension structures.
- Fixed a potential divide by zero error when the history length is set
to 0 (thanks to Mike Squillace).
- Made the linksChanged() function part of the display module.
- Fixed a bug in printLinkValues (thanks to Gautam Vallabha).
- Added the AVOID_NAN_TEST flag to allow the tests of NaN to be skipped
on machines that don't behave.
- Lens should now compile more smoothly under Cygwin on Windows.
- The interface for the graphs has been completely rewritten to allow
you to create and configure graphs and traces using script commands,
rather than just the graphical interface. Graphs and their traces are
now objects that can be accessed with the Object Viewer or setObject commands. You can also
hide graphs so they update much faster if they are not needed
immediately. The graph, trace, and exportGraph commands have been
added and the updateGraphs command was removed.
- The active unit or active link can now be locked in the Unit and Link
Viewers, by clicking on it with the left mouse button, to watch the
value on that unit or link change without having to keep the mouse
over that square.
- Clicking on a square in the Unit or Link Viewer with the middle mouse
button opens a menu that allows you to print the value, open its
object in the Object Viewer, or create a graph that will track the
- The polarity command has been
added to measure the degree to which the units in a group are adopting
binary versus intermediate output values.
- The resetDerivs command has
been added to allow you to reset the link and unit error derivatives
without updating the weights. This is useful for customized training
- The OUT_WINNER group output type has been added. This implements a
winner-take-all filter that shuts off all but the most active unit.
- A bug has been fixed in link lesioning.
- Errors in the initial script should no longer leave Lens in a strange
- Lens can now be compiled to run in Unix emulation mode under Mac OS X.
- Changed the unit initialization so its gain, when using ADAPTIVE_GAIN,
is copied from the group's gain, or the network's gain if the group's is not
- Added the ability for most of the commands that write to files to append
to an existing file.
- Added support for bzip2 compression.
- Upgraded to the latest stable release of Tcl/Tk, 8.3.4.
- The test command used to
return its results as a return value. Now it prints its results
to the shell. It also saves the results in an array for easy
- Most of the hard limits such as that on the number of group
names specified in an example file have been removed.
- Error for fully recurrent networks is now computed
differently. It used to be scaled by the network's dt and by the
group's dtScale. This was to keep the error relatively constant
if the number of ticksPerInterval was changed. The problem is
that if the user changes the time constant of the network or a
group, it will affect the error, which isn't right. The logical
thing to do is to scale the error by 1/ticksPerInterval, rather
than the dt. Ordinarily, this will be the same, since dt defaults
to 1/ticksPerInterval. But if you change dt or dtScale, it will
now no longer affect the error.
- A dtScale parameter has been created for each unit. This
allows units in a single group in a fully recurrent network have
varying time constants. The actual dt for a unit is the product
of the network's dt, the group's dtScale, and the unit's dtScale.
- The MAX_CRIT criterion has been changed so that it properly
ignores output units with no target.
- The -append flag has been added to openNetOutputFile
command to allow the information to be appended to a file.
- Errors in loading example and weight files are now reported
- If a group is specified in an example event and that group
does not exist in the network, it no longer causes an error.
This allows example sets that specify input or targets only used
in some networks, but it also makes it more likely that errors in
coding the example set will go undetected.
- The Unit Viewer now has larger entries for reporting link and
unit values. It no longer clears those values when the mouse is
removed from a unit.
- Wheel mice can now be used to activate vertical scrollbars.
- Problems with the graphical display colors on some systems
have been fixed.
- Error messages resulting from bad group types are now much smaller.
- Fixed a problem when copying with moveExamples.
- Fixed a bug that caused the link structure to occasionally be built in
random order, which interfered with loading old weight files.
- Fixed a bug that caused the backward direction of bidirectional
projections to have the same link type as the forward direction, which
- The network now has a writeExample() function pointer which is used
to writing data to the activation output
file. Thus, you can write your own C function (to replace
standardWriteExample) in order to customize the format of the output
- I moved the test for no examples out of nextExample and into the
individual loading procedures to be more flexible. Example choosing
modes like PIPE don't care if there are no examples loaded, but most
modes will care. This only affects people who have written their own
example choosing mode.
- safeRealloc() has been made somewhat more robust. It seemed to have
problems on Windows.
- Fixed a bug that caused bad values to be generated by the
randGaussian function if you frequently change the mean and range of the
- A bug that prevented reading from zipped files in Windows, which
appeared in 2.3.1, was fixed.
- A bug in the use of link weight maximum bound was fixed.
- The connectGroupToUnits command
now permits a group list, rather than just a single group.
- The connectUnits command now permits a
series of unit lists, with each unit in a list connecting to each unit in
the next list. It also accepts the "-bidirectional" flag.
- Lens can now be compiled as a library and embedded in other
- The new grapher was added.
- An updateGraphs command has
- The format of the activation output files was changed and the
WRITE_OUTPUTS group type added to allow the activations of non-output
groups to be recorded.
- RESET_ON_EXAMPLE now defaults to true for all groups. Before, it
was only true for continuous networks, but that was too confusing.
- The drawPlot command has been renamed drawUnits.
- The randGroupWeights and randUnitWeights commands are now subsumed
by the randWeights command.
- The setBlockValues, setGroupBlockValues, and setUnitBlockValues
commands have been subsumed
by the setLinkValues
- The freezeNet, freezeGroups, and freezeUnits commands have been
subsumed by the freezeWeights command.
- The thawNet, thawGroups, and thawUnits commands have been
subsumed by the thawWeights
- The netPath, groupPath, unitPath, and setPath commands have been
subsumed by a single path command.
- A GAUSSIAN group output type has been added. This is used for
radial basis units. The gain is the inverse of the width of
the Gaussian. A higher gain means a sharper Gaussian. Like LOGISTIC,
GAUSSIAN output can be used along with ADAPTIVE_GAIN to have
trainable, individual gains for each unit.
- The min and max fields have been added to the block
structures. These can be used to bound the weight values to a certain
range. For example, you might force the bias links to be negative.
They should be set with the setLinkValues command.
- Parameters for the Unit and
Link viewers are now specific to the
- Using the "-mode PIPE" flag in loadExamples automatically puts the
example set in PIPE mode now.
- Training with 0 batch size when reading from a pipe generates an
- Boltzmann network output groups will now get an error function by
default. The error is calculated at the end of training for testing
purposes but doesn't affect the training of the network.
- Renamed the TARG_COPY group type to TARGET_COPY.
- The Unit and Link viewers now support Hinton diagrams. These may
be useful for printing or on greyscale displays. The unit viewer also
now lets you view just outputs or targets, in addition to the default
combination of outputs and targets.
- The groupCriterion parameter in the network and groups has
been replaced by trainGroupCrit and testGroupCrit. This
provides separate group criteria when training and testing, because it
is useful to be able to use the group criterion function only when
testing or only when training.
- A new group criterion function, MAX_CRIT, has been added. This is
true if the output unit with the largest target is also the most
active output unit. This is most useful for networks doing a
- An initNetworkExtension() function has been added to the
extension module. You will need to add that to your extension.c.
- The trainEpochProc has been changed to preEpochProc
and a number of other handles have been provided so Tcl commands can
be executed before and after examples, events, ticks, and so on.
- The copyConnect command and the
IN_COPY, OUT_COPY, and TARG_COPY group types have been added. These
allow one group to set its inputs, outputs, or targets to the inputs,
outputs, targets, or derivatives of another group. This lets you do
a lot of interesting things, like having groups that share inputs or
targets or having the output of one group become the target of another
- Fixed a major bug that affected networks with lesioned
units. The unit outputs weren't being cached properly so
outputs and derivatives were attributed to the wrong units.
- control.c was using Tcl variables, such as i, that did not
start with a "." and could thus write over user variables.
- There is now a sysext.h file in which general customizations
can be placed to get Lens to compile properly on your machine. This
is included by the system.h file, which you should avoid
- Groups now have an outputCost field which accumulates
unit costs just as the error field accumulates error. By
giving a group a unit cost function, such as COSINE_COST, and
monitoring this value during testing, you can determine how binary the
units in a group tend to be. If logistic units do not have values
close to 0 or 1, it may indicate that the group is too small.
- Fixed a bug that caused problems when "-;" appeared in an example
file. The "-" is often used to signify a NaN target.
- If you set a group's numColumns field to a positive number,
the group will be plotted with that many columns when the autoPlot command is run. This
gives you a bit more control over how the network appears in the unit
viewer, short of specifying the layout by hand using plotRow and friends.
- In the console, you can now use the middle mouse button to paste
the current selection into the middle of a line.
- You can now use the arrow keys and PageUp/PageDown to scroll the
Object Viewer. Pressing the spacebar in the Unit Viewer will step
through the examples (equivalent to the down arrow).
- You can now add fields to your extension structures that use
uppercase names, although I don't recommend it as the Lens code by
convention reserves uppercase for global variables.
- Added an error field to each group which keeps track of the
total output error due to that group. This is useful when you have
multiple output groups. Otherwise, it will be the same value as the
network error. Only error due to immediate targets is counted, not
- The format of the output of the test command has been changed. If
there is more than one output group, it will now give the results for
individual groups as well.
- Fixed a major problem with the error derivative procedures. They
now will properly ignore units with NaN targets. Previously they were
using the most recent non-NaN targets.
- setBlockValues has been
made more general. It now works on reals, ints, flags, and masks and
on fields in block extensions. Note that extension.c has changed
and, if you have your own version, you will need to add a final NULL
argument to any calls to newObject().
- Changed the default Windows fonts.
- All files and pipes are now accessed with Tcl channels rather than
FILE *'s. This makes it more platform independent and solves several
problems, including the problem of child processes in a pipe not dying
when they should.
- Fixed some bugs in object.c that caused problems when registering
custom extension fields.
- Fixed a bug in the time command.
- Fixed a bug that prevented block extensions from being created.
- Changed the Makefile a bit and added ALPHA customizations.
- The version numbering scheme has changed. The first number is for
major rewrites. The second is for significant changes, such as
adding new commands or network types. The third is for
minor releases involving changes that won't affect most users.
- Simple recurrent backprop through time (SRBPTT) networks have been
added. These use sequential unit updates but backpropagate error
through all ticks in the example in a single pass.
- Parallel training was rewritten (again). It now works in Windows
and between Unix and Windows.
- You are now allowed to run in batch mode under Windows, but there
are some problems that seem to cause it to freeze now and then. So
use this at your own risk.
- You can now access networks, groups, and units directly by name
using setObject and getObject. Instead of
getObject [groupPath hidden].unit(5).output" you can now
getObject hidden.unit(5).output" or just
- The resetOnExample group parameter was replaced with the
RESET_ON_EXAMPLE group type flag. This defaults to FALSE for
non-continuous networks and TRUE for continuous.
- The syntax for specifying group types has changed. Now, +TYPE adds
the group type, -TYPE removes it, and just TYPE toggles it. To create
a group with no bias inputs, -BIASED should be used instead of
- The updateWeights
command was added to permit customized training without using the train command.
- A "Wait" button was added to the Main Window. This executes the wait command which causes Lens to go
idle until another command is invoked or the wait is terminated. This
is useful for pausing training.
- A task depth counter was also added to the Main Window. This
indicates the number of tasks (such as training, loading examples,
and waiting) currently on the stack.
- Calling test on an example-set in
PIPE mode with no maximum number of examples specified will run until
the pipe gives out. You don't want to do this with pipeLoop on
or with an infinite example generator.
- The COSINE cost function was added. This computes 1.0 minus the
cosine of the angle between the output and target vectors. This is
most useful for evaluation but can also be used for training as well
as evaluation. However, training can be
tricky because there is only pressure for the angle of the output
vector to be correct, not the absolute values of the outputs. You
could use SOFT_MAX outputs or a unit cost function (such as
LOGISTIC_COST) on the output units to encourage them to be binary if
that is desired.
- The verbosity command was
added. This adjusts the amount of stuff that gets printed out.
- Added the alarm command, which makes a few beeps. You might
use this in a script to tell you when training is done..
- The incoming array for each unit has been split
into incoming and incoming2. This speeds it up because
more of the critical link values can fit in the cache.
- The sigmoid was replaced with a fast table lookup with
linear interpolation. It is accurate to within 2e-7 for all inputs.
- There is now a version of the inner FOR_EACH_LINK loops,
FOR_EACH_LINK_FAST, which allows for hand unrolling of the loops,
which is about 20% faster. Currently it is only used for dot product
- The FOR_EACH_UNIT macro no longer provides the unit index variable,
u, but FOR_EACH_UNIT2 does. This speeds up the more common
- Lens now runs under Windows! Just about everything works
except parallel training, which currently uses UNIX file-descriptors.
- It has also been upgraded to Tcl/Tk 8.3.1. This uses shared
libraries and the distribution nows looks a bit different.
- You can now put an extension on the version number by putting
something like this:
char *VersionExt = "dr";
in your extension.c file. It will probably not compile if you don't.
- The -DARRAY_TRAVERSAL compile flag can now be used to cause the
inner loops to use array index traversal instead of pointer-stepping.
This may be faster with some compilers but tends to be slower with gcc.
- You can now encode inputs and targets that share the same values
with a single command in the example file. Instead of "I:" or "T:"
you use "B:".
- The assumeIntegrate flag was added to the network structure.
If this is true, which is the default for CONTINUOUS networks, when a
group's type is set and no integration function is specified,
OUT_INTEGR will be assumed. Otherwise, no integrator will be assumed
- You can now write your own procedures to select the order of
examples during training or testing. Set the example set mode to
CUSTOM and then set the example set's chooseExample field to
a procedure that returns the index of the next example.
- More information was added to the Unit
and Link viewers.
- The viewConsole command was
added to allow the console window to be recovered after it has been
- The prompts are now settable in the lensrc.default file. The
default secondary prompt is now nothing to allow multi-line commands
to be cut and pasted more easily.
- Fixed some problems with the console. You can now use \ to break a
- Fixed a bug in parsing long example set lines.
- Fixed some bugs in lesionLinks and added the
- Lens is now much faster at building networks and loading example
- Changed a million other things.
- Fixed a bug that caused error derivatives to build up in source
groups in SRNs.
- Fixed a bug parsing certain NaN dashes in example files.
- You can now run multiple commands and load multiple scripts on the
- If a group is given the ADAPTIVE_GAIN type along with the LOGISTIC
output function, it will train the units' gain parameters along with
the weights. Gain is updated using steepest descent with the learning
rate given by the network's adaptiveGainRate parameter.
- Example loading is now faster because .initExample and .initEvent
are only called if they exist.
- Files and pipes are now closed in a safer manner, eliminating some
- It no longer causes an error if example loading is terminated
part-way through or if you choosing not to replace an existing group
if a new group is added with the same name.
- Upgraded probabilistic example selection to use binary search.
- Weights can now be loaded to and from frozen links, thawed links, or
- Fixed a bug in standardTrainExample.
- Added the ability to register network types, group types,
projection types, and example selection types to make customization
- Created row and column functions for describing objects to replace
the old offsets.
- Made type.h a customizable function.
- Moved the autoNet command to the
- The biggest change in this release is that the group types have
been completely re-done and act.c was almost entirely re-written.
Now, the input and output functions of each group are actually a
pipeline of small procedures. For example, the time-integration
procedure is now separate from the basic input or output computing
procedures so you could integrate anything.
- The command usages have been completely revised to allow them to be
more consistent and flexible. Now they tend to use options, such as
"-foo 5". Procedures operating on networks, groups, and units can now
take a list of objects or * to indicate all objects. For example,
this allows connectGroups to
build complex sets of projections with a single command. The change
in usage may require you to revise many of you scripts. Commands that
may be problematic in particular are
- Several commands have been eliminated because they are no longer
needed. These include addSoftClampGroup, elmanReset, deleteAllNets,
listExampleSets, and setHistoryLength.
- Holding and releasing of groups has been eliminated for the
time-being because it was more trouble than it was worth.
- The example file format has been extended to allow a more flexible
use of dense and sparse encodings. Now the number of input and output
units need not be specified in the set header (which can be eliminated
entirely) and units can be specified relative to a named group or
across the whole network.
- Lens is now much less susceptible to faults due to multiple tasks
running simultaneously. Extended tasks, such as training or loading
example files are recorded in a stack and can be selectively canceled.
New commands will not be invoked if they could potentially cause
- The user interface is now much more responsive while Lens is busy
with ongoing tasks. The displays are updated every 100 msec to
eliminate any noticeable lag.
- The trainParallel command
now returns only when training is done. This eliminates the need to
call wait after starting to train.
- Lens now uses HOSTTYPE sub-directories in the Obj, Bin, and TclTk
directories. This allows it to be compiled on multiple architectures
without duplicating the directories.
- Added the clamped flag to units and altered the meanings of
NaN inputs to be "not clamped" rather than "remain clamped to the same
- INPUT groups can now also have HIDDEN or OUTPUT type. If so, they
will receive bias inputs and a unit combin function can be used for
unclamped units. A transfer function can be specified for any INPUT
group, which will override the standard transfer function that is
similar to LINEAR.
- Continuous networks now operate a little differently. On the first
tick of an event, the new inputs will only reach the outputs of the
INPUT groups, not to the outputs of the next groups, as it was before.
- INTEGR_INPUT and INTEGR_OUTPUT were turned into combin and transfer
functions. They can be used with arbitrary transfer or combin
functions, respectively. Or they could be used together. Some
problems with their implementation were fixed.
- A LOG_DOT_PRODUCT combin function has been added. This combines a
dot product combin with a logistic transfer. It is intended to be
used for the unclamped units in INPUT groups when clamped units are in
the range [0,1].
- A LIN_INTEGR_OUTPUT transfer function was created which is a linear
transfer that integrates the values. The standard INTEGR_OUTPUT uses
a logistic transfer. LIN_INTEGR_OUTPUT is functionally equivalent to
an INPUT_INTEGR with a linear transfer, but it can be used with INPUT
groups which have hard-clamped inputs.
- SMOOTH_CLAMP has been supplanted by using an INPUT group with a
LOG_DOT_PRODUCT combin (if units may be unclamped) and a
LIN_INTEGR_OUTPUT transfer function.
- The format for the weight files has changed to include the
totalUpdates field from the network. When a weight file is
loaded into the entire network, the network's totalUpdates is
set to that value. If the weight file is loaded into only the
non-frozen links, this value will not be set.
- Fixed some problems with the !! and ^ history recall commands in
- Fixed a bug with deleting INPUT or OUTPUT groups.
- Fixed some minor problems with the console.
- Fixed a precision problem with the measurement of elapsed time.
- Added the console, which is a TclTk-based shell. This has nicer
command-line editing and history recall than the standard shell and
also provides command and file-name completion (with the Tab key).
It must be used when running under NT. This can be activated with the
-c command-line argument.
- Weights can now be saved or loaded selectively to or from non-frozen
links. This can be used to save and load sub-networks. Load weights
no longer resets the network. Also, to save weights in text format
you must use the "
-text" flag rather than "0".
- The Link Viewer now draws frozen links with a yellow border.
- sigUSR1Proc and sigUSR2Proc are network procedures
that will be executed whenever Lens receives a USR1 or USR2 signal.
The signals can be sent using "
<process-id>". These can
be used to do emergency things while Lens is still running, even if it
is in batch mode and is non-responsive. The default procedures will
save the weights and save the parameters, respectively, in preset
files. You can change the default procedures by editing the .lensrc
file or you can change them on the fly with setObject.
- Added the backpropTicks parameter which can be used with
simple recurrent networks to extend the backpropagation backward in
time and potentially across examples.
- Added the SMOOTH_CLAMP transfer type, which can be given to an
INPUT group in a continuous network to have the activation of that
group gradually ramp up to the input value.
- Added the repeat command which
makes writing loops a little easier.
- Added the groupCritRequired parameter, which determines
whether the group criterion must be met at the end of an event to go
on to the next event.
- Some of the error measures were changed so they are less likely to
result in infinite or NaN values. Now the error is bounded to 1e8.
- DELTA was replaced by SMALL_VALUE and its value was decreased to
- Added some more information to the training reports.
- Changed the way the SET_HISTORY and GET_HISTORY
macros are used, which may interest programmers.
- train and
test now return an error code if
interrupted with a signal so that scripts that train or test in a loop
repeatedly will stop once interrupted.
- Improved performance for all but the smallest networks by creating
arrays to cache copies of unit outputs and outputDerivs.
- It is now possible to save weight deltas and link learning rates
(lastValues) in the weight files.
- The saveParameters
command now allows you to save parameters from the network into a
script file. Sourcing the script file will reset the parameter
- The source command is now
able to read from pipes, Tcl channels, and compressed files, allowing
you to compress parameter files.
- Lens can now be compiled to use double-precision floating point.
This is faster on Alphas but slower on most other machines. Binary
input and output still uses 4-byte floats for compatibility with
single-precision versions. The -DDOUBLE_REAL compile flag will enable
double precision. If you ever decide to switch from floats to
doubles, be sure to "make clean" first so everything recompiles.
- Added the changeGroupType command
which allows you to selectively turn on and off group types.
- Added the minCritBatches parameter to the network, which
sets the number of consecutive batches on which the network must
achieve the error or group criteria before training will stop, even
for Hebbian-type networks that have no targets or error.
- Criteria are now considered to be met only if the performance is
better than and not equal to the criterion. Therefore, if
criterion is set to 0.0, it will never cause training to stop.
- Fixed some integer and pointer casting ambiguities that cause
warnings on the Alpha.
- Fixed some bugs with softClamp groups.
- Removed a number of tests that prevent things being done to
lesioned units but waste time for normal networks. Any simulations
that use lesioned units should be checked to make sure they are
- Restructured system.h.
- Added Kohonen networks (actually just a special transfer function).
- unitCriterion has been changed to groupCriterion.
- Added the ability to write different group criterion functions or
to have none at all, which is now the default for all but continuous
- Added the trainEpochProc handle that lets you specify a
script command to be run before every batch is processed when
training. This makes it easier to change parameters or safe the
network on the fly.
- MACHINE_VIM has been replaced with MACHINE_LINUX in the Makefile
- Fixed a bunch of small bugs and starting making things Windows
- Temporarily removed quickProp and added "Doug's Momentum".
This is similar to standard momentum descent except that the magnitude
of the weight change vector (prior to the addition of the momentum
term) is normalized so it will not be greater than the learning rate.
This prevents overly large weight steps when the error surface is
steep and allows higher learning rates.
- Added ternary units, which are similar to logistic units but
with three stable states at -1, 0, and 1.
- Fixed a bug with loading binary example files in PIPE mode.
- Fixed a bug that prevented mean and range from being set with
- Fixed the handling of command line arguments a bit.
- Fixed a bug when clearing graphs that have fixed max or min.
- Continuous networks now operate for an extra time tick. The first
tick occurs before the first event begins and just sets the unit
outputs to their initial value. These networks were not working quite
- The group type is now stored in two 32-bit masks instead of one to
allow more group types. The change may have introduced bugs.
- Unit cost functions have been added, which can be used to encourage
hidden representations to the binary.
- The group types DOTPROD, SOFTMAX, CROSSENTROPY, and SUMSQUARE have
been changed to DOT_PROD, SOFT_MAX, CROSS_ENTROPY, and SUM_SQUARE to be
consistent with other type names.
- The learning rate scale in delta-bar-delta is now correctly being
set to 1.0 when the network is initialized.
- Added unitCostStrength and gain to the Main Window.
- Fixed a bug by which unit output derivatives were not being reset
for input-integrating hidden units, causing problems in some
- Put bounds on derivatives when using cross entropy or divergence
error functions or tanh transfer functions. This should reduce the
appearance of NaNs, although any training parameters that cause the
network to test these bounds may be too aggressive.
- Changed the name of the resetOnWrap parameter to resetOnExample and
changed the default value to TRUE.
- Made softClamp groups use the second group's gain when
computing the inverse sigmoid.
- Fixed a bug reading piped example files.
- Fixed the way command-line arguments are processed so errors are
- The link viewer no longer incorrectly reports the weight rather
than the delta when a link was clicked in "Link Deltas" mode.
- Fixed several bugs with Boltzmann machines, including one that
prevented the bias weights from updating correctly and some problems
with mixed INPUT and OUTPUT groups.
- Added the lastInput field to the unit and made it so that NaN
inputs in either the dense or sparse representation will cause the
input to remain what it was.
- The number of lines argument to
plotRow is now optional, with a
default of 1.
- Creating a ONE_TO_ONE projection between groups that are not the
same size no longer causes an error, it just connects as many units as
- Rewrote the example file format to allow more compact and flexible
files. It is not backward compatible with the old format.
- Allowed looping piped example files.
- Changed the Unit Viewer to count events starting with 0.
- Added the default.h file which stores the default values for
various network and example set parameters.
- Improved the way it guesses default example file names and
the directory and file name when saving or loading weights, example
sets, or output files.
- Removed the silent argument to the checkCompatibility
function for example sets.
- Renamed the ordered array in each example set to
- Renamed inverseTemp to gain.
- Fixed a number of undesirable "features" in deterministic Boltzmann
- Added procedures such as .initNetwork to the lensrc.default file to allow users
to set their own default values for fields in any major structure.
- Added the -BI projection type flag to connectGroups to allow the
creation of both forward and backward projections at once.
- Fixed a tiny bug in the Unit Viewer.
- Implemented Deterministic Boltzmann Machines.
- Changed the way the Unit Viewer
traverses time and added automatic playback of an example.
- Changed the network's example training, testing, and running
function pointers somewhat.
- Made it possible to perform either the training or testing
procedures when selecting an example in the Unit Viewer or when
- Made the history length, which determines the size of the arrays
stored in each unit, adjustable. The
setTime command was modified and
the setHistoryLength command was added to allow this.
- Added a temperature to each logistic function. This is adjusted by
setting the inverseTemp field in the network or group objects.
- Changed Delta-Bar-Delta so the link's learning rates scale the
default learning rate rather than replace it.
- Added rand and randInt commands.
- Fixed the Object Viewer geometry.
- Fixed a potential bug with the history command.
- Fixed a bug with target Elman layers.
- Changed type.h slightly.
- Changed cleanupGroupTypes().
- Added the Bin directory to hold different versions and made lens and
alens symbolic links to the latest version.
- Fixed a few minor bugs with addNet and the Unit Viewer.
- Changed the Network's fields from "inputs" and "outputs" to "input"
- Replaced linked lists of networks and example sets with arrays and
created the Root structure to holds the arrays.
- Parameters on the main display are now registered, rather than
hard-coded, allowing the user to customize them.
- Added a block extension record.
- Fixed how command-line arguments are processed.
- Restored missing help files.
- Added spaces to the Object Viewer and rearranged the object fields.
- Replaced the setRandValues, setGroupRandValues, and
setUnitRandValues commands with setBlockValues, setGroupBlockValues, and setUnitBlockValues.
- Put learningRate, momentum, weightDecay, randMean, and randRange
parameters in the group and block structures to allow the network
defaults to be overridden.
- Created targetRadius and changed the definition of
zeroErrorRadius. Put copies in the group structure to allow
the network defaults to be overridden.
- Added targetRadius and unitCriterion to the Main
- The event array in the example structure was changed from an
array of pointers to an array of structures.
- eventMaxTime, eventMinTime, and eventGraceTime
were moved from the network to the example set and renamed. These can
now be specified in the example file and have become part of the binary
example file, making old binary example files incompatible.
- The first official release appeared on June 9, 1998.
Last modified: Mon Dec 11 12:04:24 EST 2000