Ejemplo n.º 1
0
 public void SetUp()
 {
     networkMock = new Mock <INetwork>();
     layerMock   = new Mock <ILayer>();
     layerMock.SetupGet(m => m.NumInputs).Returns(NumInputs);
     neuron = new NeuronStub(layerMock.Object, 0);
 }
Ejemplo n.º 2
0
        public void ShouldCrudNeuron()
        {
            IConfigurationRoot configuration = GetConfiguration();

            using (UnitOfWork unitOfWork = new UnitOfWork(configuration))
            {
                NeuronBase  insertedNeuron = null;
                NetworkBase network        = null;
                try
                {
                    network = new NetworkBase()
                    {
                        Name = "Test network"
                    };
                    var networkId = unitOfWork.NetworkRepository.Insert(network);
                    network = unitOfWork.NetworkRepository.GetByID(networkId);

                    // Create
                    var neuron = new NeuronBase()
                    {
                        NetworkId    = network.NetworkId,
                        NeuronNumber = 2
                    };
                    var id = unitOfWork.NeuronRepository.Insert(neuron);
                    Assert.IsTrue(id > 0);

                    // Read
                    insertedNeuron = unitOfWork.NeuronRepository.GetByID(id);
                    Assert.IsNotNull(insertedNeuron);
                    Assert.AreEqual(id, insertedNeuron.NeuronId);

                    // Update
                    insertedNeuron.NeuronNumber = 3;
                    unitOfWork.NeuronRepository.Update(insertedNeuron);

                    insertedNeuron = unitOfWork.NeuronRepository.GetByID(id);
                    Assert.IsNotNull(insertedNeuron);
                    Assert.AreEqual(id, insertedNeuron.NeuronId);
                    Assert.AreEqual(3, insertedNeuron.NeuronNumber);

                    // Delete
                    unitOfWork.NeuronRepository.Delete(insertedNeuron);
                    insertedNeuron = unitOfWork.NeuronRepository.GetByID(id);
                    Assert.IsNull(insertedNeuron);
                }
                finally
                {
                    if (insertedNeuron != null)
                    {
                        unitOfWork.NeuronRepository.Delete(insertedNeuron);
                    }
                    if (network != null)
                    {
                        unitOfWork.NetworkRepository.Delete(network);
                    }
                }
            }
        }
        /// <summary>
        /// Найти евклидово расстояние от входного вектора до центра кластера.
        /// </summary>
        /// <param name="neuron">Нейрон.</param>
        /// <param name="inputVector">Входной вектор.</param>
        /// <returns>Евклидово расстояние от входного вектора до центра кластера.</returns>
        public double GetEuclideanDistance(NeuronBase neuron, IEnumerable <InputAttributeValue> inputVector)
        {
            double distance = 0;

            var neuronWeights = Weights
                                .Where(e => e.NeuronNumber == neuron.NeuronNumber);

            foreach (var input in inputVector)
            {
                var neuronWeight = neuronWeights
                                   .FirstOrDefault(e => e.InputAttributeNumber == input.InputAttributeNumber);

                distance += Math.Pow(neuronWeight.Value - input.Value, 2);
            }

            return(Math.Sqrt(distance));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Получить нейрон-победитель.
        /// </summary>
        /// <param name="inputEntity">Входной вектор.</param>
        /// <returns>Нейрон-победитель для входного вектора.</returns>
        public override NeuronBase GetNeuronWinner(IEnumerable <InputAttributeValue> attributeValues)
        {
            double     minDistance  = GetEuclideanDistance(Neurons[0], attributeValues);
            NeuronBase neuronWinner = Neurons[0];

            for (int i = 1; i < Neurons.Count; i++)
            {
                double currentDistance = GetEuclideanDistance(Neurons[i], attributeValues);
                if (currentDistance < minDistance)
                {
                    minDistance  = currentDistance;
                    neuronWinner = Neurons[i];
                }
            }

            return(neuronWinner);
        }
        /// <summary>
        /// Найти евклидово расстояние между 2 нейронами.
        /// </summary>
        /// <param name="neuron1">Первый нейрон.</param>
        /// <param name="neuron2">Второй нейрон.</param>
        /// <returns>Евклидово расстояние между 2 нейронами.</returns>
        public double GetEuclideanDistance(NeuronBase neuron1, NeuronBase neuron2)
        {
            double distance = 0;

            var firstNeuronWeights = Weights
                                     .Where(e => e.NeuronNumber == neuron1.NeuronNumber);
            var secondNeuronWeights = Weights
                                      .Where(e => e.NeuronNumber == neuron2.NeuronNumber);

            foreach (var firstNeuronWeight in firstNeuronWeights)
            {
                var secondNeuronWeight = secondNeuronWeights
                                         .FirstOrDefault(e => e.InputAttributeNumber == firstNeuronWeight.InputAttributeNumber);

                distance += Math.Pow(firstNeuronWeight.Value - secondNeuronWeight.Value, 2);
            }

            return(Math.Sqrt(distance));
        }
Ejemplo n.º 6
0
        void CheckConnection(Link pre, NeuronBase post, ref int i)
        {
            var bridge = from a in pre.Next join b in post.Previous on a equals b select a;

            Assert.AreEqual(bridge.Count(), 1);
            Connection inp = bridge.First();

            Assert.AreEqual(inp.Previous, pre);
            Assert.AreEqual(inp.Next, post);
            i++;
            if (post.Next != null)
            {
                foreach (var n in post.Next)
                {
                    var pp = n.Next;
                    CheckConnection(post, pp, ref i);
                }
            }
        }
Ejemplo n.º 7
0
        HashSet <Connection> GetConnections(Link[] network, bool next, bool previous)
        {
            HashSet <Connection> hs = new HashSet <Connection>();

            foreach (Link link in network)
            {
                if (next && link.Next != null)
                {
                    foreach (Connection c in link.Next)
                    {
                        hs.Add(c);
                    }
                }
                if (previous && link is NeuronBase)
                {
                    NeuronBase nb = (NeuronBase)link;
                    foreach (Connection c in nb.Previous)
                    {
                        hs.Add(c);
                    }
                }
            }
            return(hs);
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Удалить существующий экземпляр сущности.
 /// </summary>
 /// <param name="item">Модель экземпляра сущности.</param>
 public void Delete(NeuronBase item)
 {
     _dataContext.Connection.Delete(item, _dataContext.Transaction);
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Вставить новый экземпляр сущности.
 /// </summary>
 /// <param name="item">Модель нового экземпляра сущности.</param>
 /// <returns>Идентификатор нового экземпляра сущности.</returns>
 public int Insert(NeuronBase item)
 {
     return((int)_dataContext.Connection.Insert(item, _dataContext.Transaction));
 }
Ejemplo n.º 10
0
 public void TearDown()
 {
     networkMock = null;
     layerMock   = null;
     neuron      = null;
 }
Ejemplo n.º 11
0
 public virtual double TrainNetwork(TrainingTemplate trainingTemplate, NeuronBase neuron, int maxGenerations)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 12
0
 public void AppendNeuron(Guid id, NeuronBase neuron)
 {
     _neurons.Add(id, neuron);
     //neuron.Select(v => v.ToString(CultureInfo.InvariantCulture)).Subscribe(_logAggregator);
     neuron.Output = _rnd.NextDouble();
 }
Ejemplo n.º 13
0
 public NeuronData(NeuronBase neuron, NeuralNetworkData network = null)
 {
     Neuron  = neuron;
     Network = network;
 }