private static void SampleNetworkArchitecture() { SigmaEnvironment sigma = SigmaEnvironment.Create("test"); IComputationHandler handler = new CpuFloat32Handler(); ITrainer trainer = sigma.CreateTrainer("test_trainer"); trainer.Network = new Network(); trainer.Network.Architecture = InputLayer.Construct(2, 2) + ElementwiseLayer.Construct(2 * 2) + FullyConnectedLayer.Construct(2) + 2 * (FullyConnectedLayer.Construct(4) + FullyConnectedLayer.Construct(2)) + OutputLayer.Construct(2); trainer.Network = (INetwork)trainer.Network.DeepCopy(); trainer.Operator = new CpuMultithreadedOperator(10); trainer.AddInitialiser("*.weights", new GaussianInitialiser(standardDeviation: 0.1f)); trainer.AddInitialiser("*.bias*", new GaussianInitialiser(standardDeviation: 0.01f, mean: 0.03f)); trainer.Initialise(handler); trainer.Network = (INetwork)trainer.Network.DeepCopy(); Console.WriteLine(trainer.Network.Registry); IRegistryResolver resolver = new RegistryResolver(trainer.Network.Registry); Console.WriteLine("==============="); object[] weights = resolver.ResolveGet <object>("layers.*.weights"); Console.WriteLine(string.Join("\n", weights)); Console.WriteLine("==============="); //foreach (ILayerBuffer buffer in trainer.Network.YieldLayerBuffersOrdered()) //{ // Console.WriteLine(buffer.Layer.Name + ": "); // Console.WriteLine("inputs:"); // foreach (string input in buffer.Inputs.Keys) // { // Console.WriteLine($"\t{input}: {buffer.Inputs[input].GetHashCode()}"); // } // Console.WriteLine("outputs:"); // foreach (string output in buffer.Outputs.Keys) // { // Console.WriteLine($"\t{output}: {buffer.Outputs[output].GetHashCode()}"); // } //} }
private static void SampleNetworkMerging() { SigmaEnvironment sigma = SigmaEnvironment.Create("merge_test"); ITrainer[] trainers = new ITrainer[3]; int[] constantValues = { 2, 10, 70 }; //INetworkMerger merger = new WeightedNetworkMerger(10d, 10d, 1d); INetworkMerger merger = new AverageNetworkMerger(); IComputationHandler handler = new CpuFloat32Handler(); for (int i = 0; i < trainers.Length; i++) { trainers[i] = sigma.CreateTrainer($"MergeTrainer{i}"); trainers[i].Network = new Network($"{i}"); trainers[i].Network.Architecture = InputLayer.Construct(2, 2) + ElementwiseLayer.Construct(2 * 2) + OutputLayer.Construct(2); trainers[i].AddInitialiser("*.weights", new ConstantValueInitialiser(constantValues[i])); trainers[i].Operator = new CpuMultithreadedOperator(5); trainers[i].Initialise(handler); } foreach (ITrainer trainer in trainers) { Console.WriteLine(trainer.Network.Registry); } merger.AddMergeEntry("layers.*.weights"); merger.Merge(trainers[1].Network, trainers[2].Network, handler); Console.WriteLine("*******************"); foreach (ITrainer trainer in trainers) { Console.WriteLine(trainer.Network.Registry); } }