public void SaveAndLoad_DocWithChildren()
        {
            var doc = new BinaryVectorDocument();

            doc.Version = 2;

            doc.Vectors.Add(ColumnVector1D.Create(1.2, 7.4));

            var doc1 = new BinaryVectorDocument();

            doc1.Vectors.Add(ColumnVector1D.Create(8.2432, 89.4));
            doc1.Vectors.Add(ColumnVector1D.Create(20, 0.14));

            doc.Children.Add(doc1);

            using (var store = new InMemoryBlobStore())
            {
                store.Store("a", doc);

                var doc2 = store.Restore("a", new BinaryVectorDocument());

                Assert.That(doc.Vectors[0][1], Is.EqualTo(7.4));
                Assert.That(doc.Children[0].Vectors[0][0], Is.EqualTo(8.2432));
                Assert.That(doc.Children[0].Vectors[1][1], Is.EqualTo(0.14));
            }
        }
        public async Task RestoreClassifier_ReturnsValidObjectToClient()
        {
            var bytes = BitConverter.GetBytes(0);

            Assert.That(bytes.Length, Is.EqualTo(4));

            var endpoint = new Uri("tcp://localhost:9211");

            var data = Functions.NormalRandomDataset(3, 10).Select(x => new
            {
                x = x,
                y = Math.Log(x)
            }).AsQueryable();

            using (var blobs = new InMemoryBlobStore())
            using (var server = new RemoteClassifierTrainingServer(endpoint, blobs))
            using (var client = new RemoteClassifierTrainingClient(endpoint))
            {
                client.Timeout = 10000;

                server.Start();

                var trainingSet = data.CreatePipeline().AsTrainingSet(x => x.x > 10 ? 'a' : 'b');

                var keyAndclassifier = await client.CreateClassifier(trainingSet, true);

                var restoredClassifier = await client.RestoreClassifier(keyAndclassifier.Key, trainingSet.FeaturePipeline.FeatureExtractor, 'a');

                var results = restoredClassifier.Classify(new
                {
                    x = 7d,
                    y = 4.543d
                });
            }
        }
        public async Task CreateClassifier_ThenExtendClassifier_ReturnsTheSameUri()
        {
            var bytes = BitConverter.GetBytes(0);

            Assert.That(bytes.Length, Is.EqualTo(4));

            var endpoint = new Uri("tcp://localhost:9212");

            var data = Functions.NormalRandomDataset(3, 10).Select(x => new
            {
                x = x,
                y = Math.Log(x)
            }).AsQueryable();

            using (var blobs = new InMemoryBlobStore())
            using (var server = new RemoteClassifierTrainingServer(endpoint, blobs))
            using (var client = new RemoteClassifierTrainingClient(endpoint))
            {
#if DEBUG
                client.Timeout = 15000;
#endif
                server.Start();

                var trainingSet1 = data.Take(100).CreatePipeline().AsTrainingSet(x => x.x > 10 ? 'a' : 'b');
                var trainingSet2 = data.Skip(100).CreatePipeline().AsTrainingSet(x => x.x > 10 ? 'a' : 'b');

                var keyAndclassifier = await client.CreateClassifier(trainingSet1, true);

                Assert.That(keyAndclassifier.Value, Is.Not.Null);

                Console.WriteLine(keyAndclassifier.Key);

                var keyAndclassifier2 = await client.ExtendClassifier(trainingSet2, keyAndclassifier.Key);

                Console.WriteLine(keyAndclassifier2.Key);

                Assert.That(keyAndclassifier.Key, Is.EqualTo(keyAndclassifier2.Key));

                Assert.That(keyAndclassifier2.Value, Is.Not.Null);
            }
        }
        public void SaveAndLoad_BasicDoc()
        {
            var doc = new BinaryVectorDocument();

            doc.Version = 1;
            doc.Properties["title"] = "abc";
            doc.Properties["value1"] = "12";
            //doc.Properties["null"] = null;

            doc.Vectors.Add(ColumnVector1D.Create(1.2, 7.4));
            doc.Vectors.Add(ColumnVector1D.Create(0.2, 3.9));
            doc.Vectors.Add(ColumnVector1D.Create(4.6, 5.1, 8.1));

            Console.WriteLine(doc.Checksum);

            using (var store = new InMemoryBlobStore())
            {
                store.Store("a", doc);

                var doc2 = store.Restore("a", new BinaryVectorDocument());

                Assert.That(doc2.Properties.Count, Is.EqualTo(2));
                Assert.That(doc2.Properties["title"], Is.EqualTo("abc"));
                Assert.That(doc2.Properties["value1"], Is.EqualTo("12"));
                //Assert.That(doc2.Properties["null"], Is.EqualTo(""));

                Assert.That(doc.Vectors[1][1], Is.EqualTo(3.9));
            }
        }
Пример #5
0
        public void ToMultilayerNetworkClassifier_SaveOutput_RestoresAsExpected()
        {
            var pirateSample = CreatePirates().ToList();
            var pipeline = pirateSample.AsQueryable().CreatePipeline();

            using (var blob = new InMemoryBlobStore())
            {
                pipeline.OutputResultsTo(blob);

                var classifier = pipeline
                    .ToMultilayerNetworkClassifier(p => p.Age > 25 ? "old" : "young", 0.1f)
                    .Execute("x");

                var classifier2 = blob.OpenMultilayerNetworkClassifier<Pirate, string>("x");

                Assert.That(classifier2, Is.Not.Null);

                var cls = classifier2.Classify(new Pirate() { Age = 10, Gold = 2, IsCaptain = false, Ships = 1 });

                Assert.That(cls.Any(x => x.Score > 0));
            }
        }
        public async Task CreateClassifier_SavesOutput()
        {
            var bytes = BitConverter.GetBytes(0);

            Assert.That(bytes.Length, Is.EqualTo(4));

            var endpoint = new Uri("tcp://localhost:9212");

            var data = Functions.NormalRandomDataset(3, 10).Select(x => new
            {
                x = x,
                y = Math.Log(x)
            }).AsQueryable();

            using (var blobs = new InMemoryBlobStore())
            using (var server = new RemoteClassifierTrainingServer(endpoint, blobs))
            using (var client = new RemoteClassifierTrainingClient(endpoint))
            {
#if DEBUGGING
                client.Timeout = 20000;
#endif
                server.Start();

                var trainingSet = data.CreatePipeline().AsTrainingSet(x => x.x > 10 ? 'a' : 'b');

                var keyAndclassifier = await client.CreateClassifier(trainingSet, true);

                // We should be able to restore the raw blob back into a network

                var nn = new MultilayerNetwork(new NetworkParameters(1, 1));

                blobs.Restore(new string(keyAndclassifier.Key.PathAndQuery.Skip(1).ToArray()), nn);

                // We should receive a valid classifier object back

                var cls = keyAndclassifier.Value.Classify(new
                {
                    x = 12.432,
                    y = Math.Log(12.432)
                });

                foreach (var c in cls)
                {
                    Console.WriteLine(c);
                }

                Assert.That(cls.Any());
            }
        }
        public async Task CreateClassifier_TwoClients()
        {
            var bytes = BitConverter.GetBytes(0);

            Assert.That(bytes.Length, Is.EqualTo(4));

            var endpoint = new Uri("tcp://localhost:9214");

            var data = Functions.NormalRandomDataset(3, 10).Select(x => new
            {
                x = x,
                y = Math.Log(x)
            }).AsQueryable();

            using (var blobs = new InMemoryBlobStore())
            using (var server = new RemoteClassifierTrainingServer(endpoint, blobs))
            using (var client1 = new RemoteClassifierTrainingClient(endpoint))
            using (var client2 = new RemoteClassifierTrainingClient(endpoint))
            {
                client1.Timeout = 5000;
                client2.Timeout = 5000;

                server.Start();

                var trainingSet = data.CreatePipeline().AsTrainingSet(x => x.x > 10 ? 'a' : 'b');

                var task1 = client1.CreateClassifier(trainingSet, true);
                var task2 = client2.CreateClassifier(trainingSet, true);
                
                await task1;
                await task2;
            }
        }