public static async Task Main() { // Create the network INeuralNetwork network = NetworkManager.NewSequential(TensorInfo.Image <Alpha8>(28, 28), NetworkLayers.Convolutional((5, 5), 20, ActivationType.Identity), NetworkLayers.Pooling(ActivationType.LeakyReLU), NetworkLayers.FullyConnected(100, ActivationType.LeCunTanh), NetworkLayers.Softmax(10)); // Prepare the dataset ITrainingDataset trainingData = await Mnist.GetTrainingDatasetAsync(100); // Batches of 100 samples ITestDataset testData = await Mnist.GetTestDatasetAsync(p => Printf($"Epoch {p.Iteration}, cost: {p.Result.Cost}, accuracy: {p.Result.Accuracy}")); if (trainingData == null || testData == null) { Printf("Error downloading the datasets"); Console.ReadKey(); return; } // Train the network TrainingSessionResult result = await NetworkManager.TrainNetworkAsync(network, trainingData, TrainingAlgorithms.AdaDelta(), 60, 0.5f, TrackBatchProgress, testDataset : testData); Printf($"Stop reason: {result.StopReason}, elapsed time: {result.TrainingTime}"); Console.ReadKey(); }
public void Initialization1() { INeuralNetwork network = NetworkManager.NewGraph(TensorInfo.Image <Alpha8>(60, 60), root => { var conv1 = root.Layer(NetworkLayers.Convolutional((5, 5), 10, ActivationType.Identity)); var pool1 = conv1.Layer(NetworkLayers.Pooling(ActivationType.LeakyReLU)); var conv2 = pool1.Layer(NetworkLayers.Convolutional((3, 3), 10, ActivationType.Identity)); var pool2 = conv2.Layer(NetworkLayers.Pooling(ActivationType.ReLU)); var fc = pool2.Layer(NetworkLayers.FullyConnected(64, ActivationType.LeCunTanh)); _ = fc.Layer(NetworkLayers.Softmax(10)); });
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, ActivationFunctionType.AbsoluteReLU), NetworkLayers.Convolutional((5, 5), 20, ActivationFunctionType.ELU), NetworkLayers.Convolutional((10, 10), 20, ActivationFunctionType.Identity), NetworkLayers.Pooling(ActivationFunctionType.ReLU), NetworkLayers.Convolutional((10, 10), 20, ActivationFunctionType.Identity), NetworkLayers.Pooling(ActivationFunctionType.ReLU), NetworkLayers.FullyConnected(125, ActivationFunctionType.Tanh), NetworkLayers.Softmax(133)); using (MemoryStream stream = new MemoryStream()) { network.Save(stream); stream.Seek(0, SeekOrigin.Begin); INeuralNetwork copy = NetworkLoader.TryLoad(stream, LayersLoadingPreference.Cpu); Assert.IsTrue(network.Equals(copy)); } }