Esempio n. 1
0
        private NeuralVectors CreateNeuralVectors(int index)
        {
            var fs = featureStreams[index];
            var fa = fs.CreateFeatureArray(SampleSize);
            if (SubSampleSize == SampleSize)
            {
                var nv = new NeuralVectors(index, new VectorFlowEntry<double>(CreateInputVector(fa), CreateOutputVector(fs), NumberOfComputationIterations));
                return nv;
            }
            else
            {
                var entries = new LinkedList<VectorFlowEntry<double>>();
                int size = SampleSize / SubSampleSize;
                for (int lookupIndex = 0; lookupIndex < lookupArray.Length; lookupIndex++)
                {
                    Point lookupPoint = lookupArray[lookupIndex];
                    double?[] inputVector = new double?[SubSampleSize * SubSampleSize];
                    int inputIndex = 0;

                    for (int y = lookupPoint.Y; y < lookupPoint.Y + SubSampleSize; y++)
                    {
                        for (int x = lookupPoint.X; x < lookupPoint.X + SubSampleSize; x++)
                        {
                            inputVector[inputIndex++] = fa[y, x];
                        }
                    }

                    
                    //for (int y = 0; y < SampleSize; y += size)
                    //{
                    //    for (int x = 0; x < SampleSize; x += size)
                    //    {
                    //        int xp = x + lookupPoint.X;
                    //        int yp = y + lookupPoint.Y;
                    //        inputVector[inputIndex++] = fa[yp, xp];
                    //    }
                    //}

                    if (lookupIndex != lookupArray.Length - 1)
                    {
                        entries.AddLast(new VectorFlowEntry<double>(inputVector, NullOutput)); 
                    }
                    else
                    {
                        entries.AddLast(new VectorFlowEntry<double>(inputVector, CreateOutputVector(fs), NumberOfComputationIterations));
                    }
                }

                return new NeuralVectors(index, entries);
            }
        }
Esempio n. 2
0
        private void OnGetNextVectorsCompleted(NativeActivityContext context, ActivityInstance instance, NeuralVectors vectors)
        {
            var list = vectorList.Get(context);

            if (vectors != null) list.Add(vectors);

            if (vectors == null || list.Count == GetBatchSize(context))
            {
                GetNextVectorsDone(context, list.ToArray(), TrainingResetSchedule.None);
            }
            else if (vectors.IsEndOfStream)
            {
                GetNextVectorsDone(context, list.ToArray(), TrainingResetSchedule.AfterExecution);
            }
            else
            {
                ScheduleGetNextVectors(context);
            }

            list.Clear();
        }
Esempio n. 3
0
        private void ProcessNextVectors(NativeActivityContext context, NeuralVectors[] result)
        {
            bool reinitialize = false;
            IList<NeuralVectors> finalResult = result;

            if (IsCached(context))
            {
                var vars = ComputationContext.GetVariables(context, this); 
                var cache = vars.Get<SerializableCache>(CacheVarName).Cache;

                // Cache results:
                if (result != null)
                {
                    foreach (var vectors in result)
                    {
                        string key = vectors.ProviderIndex.ToString();
                        cache[key] = vectors;
                    }
                }

                // Combine cached vectors with result:
                var vectorsFromCache = cachedVectors.Get(context);
                cachedVectors.Set(context, null);

                if (result != null)
                {
                    if (vectorsFromCache.Count != 0)
                    {
                        finalResult = result.Concat(vectorsFromCache).ToList();
                    }
                }
                else
                {
                    finalResult = vectorsFromCache.ToList();
                }
            }

            if (ReinitializationFrequency != null && ReinitializeVectorProvider != null)
            {
                var freq = ReinitializationFrequency.Get(context);
                if (freq > 0)
                {
                    var vars = ComputationContext.GetVariables(context, this);
                    int iterations = vars.Get<int>(IterationsVarName);

                    if ((++iterations % freq) == 0)
                    {
                        context.ScheduleAction(ReinitializeVectorProvider, OnReinitializeVectorProviderCompleted);
                        reinitialize = true;
                    }

                    vars.Set(IterationsVarName, iterations);
                }
            }

            GetNextVectorsDone(context, finalResult, reinitialize ? TrainingResetSchedule.AfterExecution : TrainingResetSchedule.None);
        }
Esempio n. 4
0
 private void OnGetNextVectorsCompleted(NativeActivityContext context, ActivityInstance instance, NeuralVectors[] result)
 {
     ProcessNextVectors(context, result);
 }
Esempio n. 5
0
        private void OnGetNextVectorsCompleted(NativeActivityContext context, ActivityInstance instance, NeuralVectors[] result)
        {
            if (ReinitializationFrequency != null && ReinitializeVectorProvider != null)
            {
                var freq = ReinitializationFrequency.Get(context);
                if (freq > 0)
                {
                    var vars = ComputationContext.GetVariables(context, this);
                    int iterations = vars.Get<int>(IterationsVarName);

                    if ((++iterations % freq) == 0)
                    {
                        context.ScheduleAction(ReinitializeVectorProvider, OnReinitializeVectorProviderCompleted);
                    }

                    vars.Set(IterationsVarName, iterations);
                }
            }

            GetNextVectorsDone(context, result, TrainingResetSchedule.None);
        }