# This network has two sets of inputs: task inputs and data inputs.  The task
# inputs specify what task to perform on the data inputs.  In this case, the
# data inputs are broken into three blocks of two units and the task inputs
# specify which of those blocks is to be output.  This is a rather easy task
# but it illustrates how you might design a network to do something more
# complicated, like calculating boolean formulas.

addNet task
addGroup task       3 INPUT
addGroup taskHidden 6
addGroup input      6 INPUT
addGroup hidden     6 PRODUCT
addGroup output     2 OUTPUT

connectGroups task taskHidden
connectGroups taskHidden hidden -p ONE_TO_ONE
connectGroups input hidden      -p ONE_TO_ONE
connectGroups hidden output

setObj learningRate 0.01

if [catch {path -s train}] {
  loadExamples task.ex -s train
  moveExamples train test 0.05
}

resetPlot 15
plotRow 1 f c output 8
plotRow 1
plotRow 1 f c hidden 8
plotRow 1
plotRow 1 c taskHidden 6 f
plotRow 1
plotRow 1 c task 7 n input 2 b 1 n input 2 b 1 n input 2
drawUnits

viewUnits
graphObject
