class_methods_end int FFNet_init (FFNet me, long numberOfInputs, long nodesInLayer1, long nodesInLayer2, long numberOfOutputs, int outputsAreLinear) { long numberOfLayers = 3; if (numberOfInputs < 1 || numberOfOutputs < 1) return 0; if (nodesInLayer1 < 1) numberOfLayers--; if (nodesInLayer2 < 1) numberOfLayers--; my nLayers = numberOfLayers; my nUnitsInLayer = NUMlvector (0, numberOfLayers); if (my nUnitsInLayer == NULL) return 0; my nUnitsInLayer[numberOfLayers--] = numberOfOutputs; if (nodesInLayer2 > 0) my nUnitsInLayer[numberOfLayers--] = nodesInLayer2; if (nodesInLayer1 > 0) my nUnitsInLayer[numberOfLayers--] = nodesInLayer1; my nUnitsInLayer[numberOfLayers] = numberOfInputs; Melder_assert (numberOfLayers == 0); my outputsAreLinear = outputsAreLinear; if (! bookkeeping (me)) return 0; FFNet_setCostFunction (me, FFNet_COST_MSE); FFNet_setNonLinearity (me, FFNet_NONLIN_SIGMOID); FFNet_reset (me, 0.1); return 1; }
void FFNet_init (FFNet me, long numberOfInputs, long nodesInLayer1, long nodesInLayer2, long numberOfOutputs, int outputsAreLinear) { long numberOfLayers = 3; if (numberOfInputs < 1) { Melder_throw (U"Number of inputs must be a natural number."); } if (numberOfOutputs < 1) { Melder_throw (U"Number of outputs must be a natural number."); } if (nodesInLayer1 < 1) { numberOfLayers--; } if (nodesInLayer2 < 1) { numberOfLayers--; } my nLayers = numberOfLayers; my nUnitsInLayer = NUMvector<long> (0, numberOfLayers); my nUnitsInLayer[numberOfLayers--] = numberOfOutputs; if (nodesInLayer2 > 0) { my nUnitsInLayer[numberOfLayers--] = nodesInLayer2; } if (nodesInLayer1 > 0) { my nUnitsInLayer[numberOfLayers--] = nodesInLayer1; } my nUnitsInLayer[numberOfLayers] = numberOfInputs; Melder_assert (numberOfLayers == 0); my outputsAreLinear = outputsAreLinear; bookkeeping (me); FFNet_setCostFunction (me, FFNet_COST_MSE); FFNet_setNonLinearity (me, FFNet_NONLIN_SIGMOID); FFNet_reset (me, 0.1); }