Exemplo n.º 1
0
        public static int[] GetLayers(this SequentialModel sequentialModel)
        {
            var layers = new List <int>();
            var l      = sequentialModel.GetFieldValue <DefaultExecutor>("compiled").GetFieldValue <List <ILayer> >("layers");

            var output = 0;

            foreach (var layer in l)
            {
                if (!(layer is Dense2DLayer))
                {
                    continue;
                }

                var denseSum = (layer as Dense2DLayer).GetLayerSummary();
                layers.Add(denseSum.InputChannel);
                output = denseSum.OutputChannel;
            }

            layers.Add(output);

            return(layers.ToArray());
        }
Exemplo n.º 2
0
        public static double[] GetWeights(this SequentialModel sequentialModel)
        {
            // reflection used because there is no other way to get the weights of a network in nnsharp
            var weights  = new List <double>();
            var compiled = sequentialModel.GetFieldValue <DefaultExecutor>("compiled");
            var layers   = compiled.GetFieldValue <IList <ILayer> >("layers");

            var dim = sequentialModel.GetInputDimension();

            // set the initInput field otherwise the error: input is not Data2D (Dense2DLayer)
            compiled.SetFieldValue <Data2D>("initInput", new Data2D(dim.h, dim.w, dim.c, dim.b));


            foreach (var layer in layers)
            {
                if (layer is Dense2DLayer)
                {
                    var t = (layer as Dense2DLayer).GetFieldValue <IData>("weights").GetFieldValue <double[, , , ]>("tensor")
                            .GetEnumerator();
                    while (t.MoveNext())
                    {
                        if (t.Current != null)
                        {
                            weights.Add((double)t.Current);
                        }
                    }
                }
                else if (layer is Bias2DLayer)
                {
                    var a = layer.GetFieldValue <IData>("biases").GetFieldValue <double[]>("array");
                    weights.AddRange(a);
                }
            }

            return(weights.ToArray());
        }