Ejemplo n.º 1
0
        public static LSTMLayer Load(BinaryReader br, LayerType layerType)
        {
            LSTMLayerConfig config = new LSTMLayerConfig();

            config.LayerSize = br.ReadInt32();
            config.LayerType = layerType;
            LSTMLayer layer = new LSTMLayer(config);

            layer.SparseFeatureSize = br.ReadInt32();
            layer.DenseFeatureSize  = br.ReadInt32();

            //Create cells of each layer
            layer.InitializeCellWeights(br);

            //Load weight matrix between each two layer pairs
            //weight input->hidden
            if (layer.SparseFeatureSize > 0)
            {
                Logger.WriteLine("Loading sparse feature weights...");
                layer.sparseFeatureWeights = LoadLSTMWeights(br);
            }

            if (layer.DenseFeatureSize > 0)
            {
                //weight fea->hidden
                Logger.WriteLine("Loading dense feature weights...");
                layer.wDenseInputGate  = LoadLSTMGateWeights(br);
                layer.wDenseCellGate   = LoadLSTMGateWeights(br);
                layer.wDenseForgetGate = LoadLSTMGateWeights(br);
                layer.wDenseOutputGate = LoadLSTMGateWeights(br);
            }

            return(layer);
        }
Ejemplo n.º 2
0
        private void SetHiddenLayers()
        {
            //Get hidden layer settings
            //Example: LSTM:200, Dropout:0.5
            HiddenLayersConfig = new List <LayerConfig>();
            var hiddenLayers = config.GetValueRequired(HIDDEN_LAYER);

            foreach (var layer in hiddenLayers.Split(','))
            {
                var items      = layer.Split(':');
                var sLayerType = items[0].Trim();
                var layerType  = LayerType.None;
                foreach (
                    var type in
                    Enum.GetValues(typeof(LayerType))
                    .Cast <LayerType>()
                    .Where(
                        type => sLayerType.Equals(type.ToString(), StringComparison.InvariantCultureIgnoreCase))
                    )
                {
                    layerType = type;
                    break;
                }

                LayerConfig baseLayerConfig;
                switch (layerType)
                {
                case LayerType.LSTM:
                {
                    var layerConfig = new LSTMLayerConfig();
                    layerConfig.LayerSize = int.Parse(items[1]);
                    layerConfig.LayerType = layerType;
                    baseLayerConfig       = layerConfig;
                    Logger.WriteLine($"Initialize configuration for LSTM layer. Layer size = {layerConfig.LayerSize}");
                }
                break;

                case LayerType.DropOut:
                {
                    var layerConfig = new DropoutLayerConfig {
                        DropoutRatio = float.Parse(items[1])
                    };
                    layerConfig.LayerSize = (NetworkType == NETWORKTYPE.BiDirectional) ? HiddenLayersConfig[HiddenLayersConfig.Count - 1].LayerSize * 2 : HiddenLayersConfig[HiddenLayersConfig.Count - 1].LayerSize;
                    layerConfig.LayerType = layerType;
                    baseLayerConfig       = layerConfig;
                    Logger.WriteLine(
                        $"Initialize configuration for Dropout layer. Dropout ratio = '{layerConfig.DropoutRatio}'");
                }
                break;

                default:
                    throw new ArgumentException($"Invalidated layer type: {sLayerType}");
                }

                HiddenLayersConfig.Add(baseLayerConfig);
            }
            Logger.WriteLine($"Hidden layer : {HiddenLayersConfig.Count}");
            Logger.WriteLine($"Hidden layer : {hiddenLayers}");
        }
Ejemplo n.º 3
0
 public LSTMLayer(LSTMLayerConfig config) : base(config)
 {
     this.config = config;
     LSTMCells   = new LSTMCell[LayerSize];
     for (var i = 0; i < LayerSize; i++)
     {
         LSTMCells[i] = new LSTMCell();
     }
 }
Ejemplo n.º 4
0
        private void SetHiddenLayers()
        {
            //Get hidden layer settings
            HiddenLayersConfig = new List <LayerConfig>();
            var hiddenLayers = config.GetValueRequired(HIDDEN_LAYER);

            foreach (var layer in hiddenLayers.Split(','))
            {
                var items      = layer.Split(':');
                var sLayerSize = items[0].Trim();
                var sLayerType = items[1].Trim();

                //Parse layer size and type
                var layerSize = int.Parse(sLayerSize);
                var layerType = LayerType.None;

                foreach (
                    var type in
                    Enum.GetValues(typeof(LayerType))
                    .Cast <LayerType>()
                    .Where(
                        type => sLayerType.Equals(type.ToString(), StringComparison.InvariantCultureIgnoreCase))
                    )
                {
                    layerType = type;
                    break;
                }

                LayerConfig baseLayerConfig;
                switch (layerType)
                {
                case LayerType.LSTM:
                {
                    var layerConfig = new LSTMLayerConfig();
                    baseLayerConfig = layerConfig;
                    Logger.WriteLine("Initialize configuration for LSTM layer.");
                }
                break;

                case LayerType.BPTT:
                {
                    if (items.Length != 3)
                    {
                        throw new ArgumentException(
                                  $"Invalidated settings for BPTT: {layer}, it should be [size:BPTT:bptt_value], such as [200:BPTT:5] .");
                    }

                    var layerConfig = new BPTTLayerConfig {
                        Bptt = int.Parse(items[2])
                    };
                    baseLayerConfig = layerConfig;
                    Logger.WriteLine($"Initialize configuration for BPTT layer. BPTT = '{layerConfig.Bptt}'");
                }
                break;

                case LayerType.DropOut:
                {
                    var layerConfig = new DropoutLayerConfig {
                        DropoutRatio = float.Parse(items[2])
                    };
                    baseLayerConfig = layerConfig;
                    Logger.WriteLine(
                        $"Initialize configuration for Dropout layer. Dropout ratio = '{layerConfig.DropoutRatio}'");
                }
                break;

                default:
                    throw new ArgumentException($"Invalidated layer type: {sLayerType}");
                }

                baseLayerConfig.LayerType = layerType;
                baseLayerConfig.LayerSize = layerSize;

                HiddenLayersConfig.Add(baseLayerConfig);
            }
            Logger.WriteLine($"Hidden layer : {HiddenLayersConfig.Count}");
            Logger.WriteLine($"Hidden layer : {hiddenLayers}");
        }
Ejemplo n.º 5
0
 public LSTMLayer(LSTMLayerConfig config) : base(config)
 {
     AllocateMemoryForLSTMCells();
 }