public void JsonMetadataSerialization()
        {
            INeuralNetwork network = NetworkManager.NewSequential(TensorInfo.Image <Rgb24>(120, 120),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.AbsoluteReLU),
                                                                  NetworkLayers.Convolutional((5, 5), 20, ActivationType.ELU),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.Identity),
                                                                  NetworkLayers.Pooling(ActivationType.ReLU),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.Identity),
                                                                  NetworkLayers.Pooling(ActivationType.Identity),
                                                                  NetworkLayers.BatchNormalization(NormalizationMode.Spatial, ActivationType.ReLU),
                                                                  NetworkLayers.FullyConnected(125, ActivationType.Tanh),
                                                                  NetworkLayers.Softmax(133));
            string metadata1 = network.SerializeMetadataAsJson();

            Assert.IsTrue(metadata1.Length > 0);
            Assert.IsTrue(metadata1.Equals(network.Clone().SerializeMetadataAsJson()));
            network.Layers.First().To <INetworkLayer, ConvolutionalLayer>().Weights[0] += 0.1f;
            Assert.IsFalse(metadata1.Equals(network.SerializeMetadataAsJson()));
        }
        public void NetworkSerialization()
        {
            INeuralNetwork network = NetworkManager.NewSequential(TensorInfo.Image <Rgb24>(120, 120),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.AbsoluteReLU),
                                                                  NetworkLayers.Convolutional((5, 5), 20, ActivationType.ELU),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.Identity),
                                                                  NetworkLayers.Pooling(ActivationType.ReLU),
                                                                  NetworkLayers.Convolutional((10, 10), 20, ActivationType.Identity),
                                                                  NetworkLayers.Pooling(ActivationType.Identity),
                                                                  NetworkLayers.BatchNormalization(NormalizationMode.Spatial, ActivationType.ReLU),
                                                                  NetworkLayers.FullyConnected(125, ActivationType.Tanh),
                                                                  NetworkLayers.Softmax(133));

            using (MemoryStream stream = new MemoryStream())
            {
                network.Save(stream);
                stream.Seek(0, SeekOrigin.Begin);
                INeuralNetwork copy = NetworkLoader.TryLoad(stream, ExecutionModePreference.Cpu);
                Assert.IsTrue(network.Equals(copy));
            }
        }