Esempio n. 1
0
 /// <summary>
 /// Updates the statistics.
 /// </summary>
 /// <param name="neuron">The hidden neuron.</param>
 /// <param name="inputSynapses">A collection of the input synapses.</param>
 /// <param name="internalSynapses">A collection of the internal synapses.</param>
 public void Update(HiddenNeuron neuron, IList <Synapse> inputSynapses, IList <Synapse> internalSynapses)
 {
     ++NumOfNeurons;
     Activation.Update(neuron.Statistics.ActivationStat);
     Stimuli.Update(neuron);
     Synapses.Update(inputSynapses);
     Synapses.Update(internalSynapses);
     Signal.Update(neuron);
     NeuronsAnomalies.Update(neuron, internalSynapses.Count);
     return;
 }
Esempio n. 2
0
        /// <summary>
        /// Informs this Epoch that stimulus data was output by the Symphony.Core output pipeline.
        /// </summary>
        /// <param name="device">ExternalDevice that was the target of the output data</param>
        /// <param name="outputTime">Approximate time the data was written "to the wire"</param>
        /// <param name="duration">Duration of the output data segment</param>
        /// <param name="configuration">Pipeline node configuration(s) for nodes that processed the outgoing data</param>
        public virtual void DidOutputData(IExternalDevice device, DateTimeOffset outputTime, TimeSpan duration, IEnumerable <IPipelineNodeConfiguration> configuration)
        {
            //virtual so that we can mock it

            if (outputTime < StartTime)
            {
                throw new ArgumentException("Data output time must be after Epoch start time", "outputTime");
            }

            if (Stimuli.ContainsKey(device))
            {
                Stimuli[device].DidOutputData(duration, configuration);
            }
        }
Esempio n. 3
0
        //Generate confusion matrix log
        public string GenerateConfusionMatrixLog()
        {
            int k = Stimuli.Count;

            int[,] matrix = new int[k, k];
            for (int i = 0; i < k; ++i)
            {
                for (int j = 0; j < k; ++j)
                {
                    matrix[i, j] = 0;
                }
            }

            foreach (string pair in stimuliResponsePairs)
            {
                string stimulus = pair.Split(","[0])[0];
                string response = pair.Split(","[0])[1];
                int    i        = GetIndexOfStimulus(stimulus);
                int    j        = GetIndexOfStimulus(response);
                if (i != -1 && j != -1)
                {
                    matrix[i, j] += 1;
                }
            }

            string log = "EMPTY";

            foreach (Stimulus stimulus in Stimuli)
            {
                log += "," + stimulus.Name;
            }
            log += "\n";
            for (int i = 0; i < k; ++i)
            {
                log += Stimuli.ElementAt(i).Name;
                for (int j = 0; j < k; ++j)
                {
                    log += "," + matrix[i, j];
                }
                if (i != k - 1)
                {
                    log += "\n";
                }
            }
            return(log);
        }
Esempio n. 4
0
        /// <summary>
        /// Pulls output data from the given device of the given duration.
        /// <para>If the given device has an associated Stimulus in this.Stimuli,
        /// the data is pulled from that Stimulus. If there is no associated Stimulus,
        /// data is generated according to this.Background[dev].</para>
        /// </summary>
        /// <param name="dev">Output device requesting data</param>
        /// <param name="blockDuration">Requested duration of the IOutputData</param>
        /// <returns>IOutputData intsance with duration less than or equal to blockDuration</returns>
        public IOutputData PullOutputData(IExternalDevice dev, TimeSpan blockDuration)
        {
            if (Stimuli.ContainsKey(dev))
            {
                var blockIter = StimulusDataEnumerators.GetOrAdd(dev,
                                                                 (d) => Stimuli[d].DataBlocks(blockDuration).GetEnumerator()
                                                                 );

                IOutputData stimData = null;
                while (stimData == null || stimData.Duration < blockDuration)
                {
                    if (!blockIter.MoveNext())
                    {
                        break;
                    }

                    stimData =
                        stimData == null ? blockIter.Current : stimData.Concat(blockIter.Current);
                }

                if (stimData == null)
                {
                    return(BackgroundDataForDevice(dev, blockDuration));
                }

                if (stimData.Duration < blockDuration)
                {
                    var remainingDuration = blockDuration - stimData.Duration;
                    stimData = stimData.Concat(BackgroundDataForDevice(dev, remainingDuration));
                }

                return(stimData);
            }


            log.DebugFormat("Will send background for device {0} ({1})", dev.Name, blockDuration);
            return(BackgroundDataForDevice(dev, blockDuration));
        }
Esempio n. 5
0
 //Get a random stimulus from the stimuli set
 public Stimulus GetRandomStimulus()
 {
     return(Stimuli.ElementAt(r.Next(0, Stimuli.Count)));
 }