Пример #1
0
        public void WriteOutputMatrix(WordCollection wordCollection, Layer neuralNetwork)
        {
            using (var fs = new FileStream(_outputFile, FileMode.OpenOrCreate, FileAccess.Write))
            {
                fs.Seek(0, SeekOrigin.End);
                using (var writer = new StreamWriter(fs, Encoding.UTF8))
                {
                    var words = wordCollection.GetWords().ToList();

                    var stringBuilder = new StringBuilder();

                    stringBuilder.Append(",");
                    foreach (var word in words)
                    {
                        stringBuilder.Append($"{word},");
                    }
                    stringBuilder.AppendLine();
                    for (var i = 0; i < words.Count; i++)
                    {
                        var inputs = new double[words.Count];
                        inputs[i] = 1;
                        neuralNetwork.PopulateAllOutputs(inputs);

                        stringBuilder.Append($"{words[i]},");
                        for (var j = 0; j < words.Count; j++)
                        {
                            stringBuilder.Append($"{neuralNetwork.Nodes[j].Output},");
                        }
                        stringBuilder.AppendLine();
                    }

                    writer.WriteLine(stringBuilder.ToString());
                }
            }
        }
Пример #2
0
        private void InitUnigramTable()
        {
            if (_wordCollection.GetNumberOfUniqueWords() == 0)
            {
                return;
            }

            int a;
            var power = 0.75;

            _table = new int[TableSize];
            var trainWordsPow = _wordCollection.GetTrainWordsPow(power);

            var i    = 0;
            var keys = _wordCollection.GetWords().ToArray();
            var d1   = Math.Pow(_wordCollection.GetOccurrenceOfWord(keys.First()), power) / trainWordsPow;

            for (a = 0; a < TableSize; a++)
            {
                _table[a] = i;
                if (a / (double)TableSize > d1)
                {
                    i++;
                    d1 += Math.Pow(_wordCollection.GetOccurrenceOfWord(keys[i]), power) / trainWordsPow;
                }
                if (i >= _wordCollection.GetNumberOfUniqueWords())
                {
                    i = _wordCollection.GetNumberOfUniqueWords() - 1;
                }
            }
        }
Пример #3
0
 public void WriteOutput(WordCollection wordCollection, int numberOfDimensions, float[,] hiddenLayerWeights)
 {
     using (var fs = new FileStream(_outputFile, FileMode.OpenOrCreate, FileAccess.Write))
     {
         fs.Seek(0, SeekOrigin.End);
         using (var writer = new StreamWriter(fs, Encoding.UTF8))
         {
             var keys = wordCollection.GetWords().ToArray();
             for (var a = 0; a < wordCollection.GetNumberOfUniqueWords(); a++)
             {
                 var bytes = new List <byte>();
                 for (var dimensionIndex = 0; dimensionIndex < numberOfDimensions; dimensionIndex++)
                 {
                     bytes.AddRange(BitConverter.GetBytes(hiddenLayerWeights[a, dimensionIndex]));
                 }
                 writer.WriteLine($"{keys[a]}\t{Convert.ToBase64String(bytes.ToArray())}");
             }
         }
     }
 }