Пример #1
0
        public void Connect(Layer layer)
        {
            _layer = layer;

            if (args.InputTensors != null)
            {
                KerasInputs.AddRange(args.InputTensors);
            }

            // Wire up Node to Layers.
            layer.InboundNodes.Add(this);

            foreach (var kt in KerasInputs)
            {
                if (kt.KerasHistory == null)
                {
                    continue;
                }
                var(inbound_layer, _, _) = kt.KerasHistory;
                if (inbound_layer != null)
                {
                    inbound_layer.OutboundNodes.Add(this);
                }
            }

            // Set metadata on outputs.
            var node_index = layer.InboundNodes.Count - 1;

            foreach (var(i, tensor) in enumerate(Outputs))
            {
                tensor.KerasHistory = new KerasHistory(layer, node_index, i);
            }
        }
Пример #2
0
 /// <summary>
 /// Serializes `Node` for Functional API's `get_config`.
 /// </summary>
 /// <returns></returns>
 public List <NodeConfig> serialize(Func <string, int, string> make_node_key, Dictionary <string, int> node_conversion_map)
 {
     return(KerasInputs.Select(x => {
         var kh = x.KerasHistory;
         var node_key = make_node_key(kh.Layer.Name, kh.NodeIndex);
         var new_node_index = node_conversion_map.Get(node_key, 0);
         return new NodeConfig
         {
             Name = kh.Layer.Name,
             NodeIndex = new_node_index,
             TensorIndex = kh.TensorIndex
         };
     }).ToList());
 }
Пример #3
0
        /// <summary>
        /// Maps Keras Tensors to computed Tensors using `tensor_dict`.
        /// </summary>
        /// <param name="tensor_dict"></param>
        /// <returns></returns>
        public Tensors MapArguments(Dictionary <int, Queue <Tensor> > tensor_dict)
        {
            if (_single_positional_tensor_passed)
            {
                var kt_id = _keras_inputs_ids_and_indices[0];
                return(tensor_dict[kt_id].Dequeue());
            }
            else
            {
                var flat_arguments = KerasInputs.Select(x => x).ToArray();
                foreach (var(kt_index, kt_id) in enumerate(_keras_inputs_ids_and_indices))
                {
                    flat_arguments[kt_index] = tensor_dict[kt_id].Dequeue();
                }

                return(flat_arguments);
            }
        }
Пример #4
0
        /// <summary>
        /// Maps Keras Tensors to computed Tensors using `tensor_dict`.
        /// </summary>
        /// <param name="tensor_dict"></param>
        /// <returns></returns>
        public Tensors MapArguments(Dictionary <long, Queue <Tensor> > tensor_dict)
        {
            if (KerasInputs.Count() == 1)
            {
                var kt_id = KerasInputs[0].Id;
                return(tensor_dict[kt_id].Dequeue());
            }
            else
            {
                var flat_arguments = KerasInputs.Select(x => x).ToArray();
                foreach (var(kt_index, kt) in enumerate(KerasInputs))
                {
                    flat_arguments[kt_index] = tensor_dict[kt.Id].Dequeue();
                }

                return(flat_arguments);
            }
        }
Пример #5
0
        public Node(Layer layer, NodeArgs args)
        {
            this.args  = args;
            this.Layer = layer;

            if (args.InputTensors != null)
            {
                KerasInputs.AddRange(args.InputTensors);
            }

            foreach (var(i, ele) in enumerate(KerasInputs))
            {
                _keras_inputs_ids_and_indices[i] = ele.GetHashCode();
            }

            // Wire up Node to Layers.
            layer.InboundNodes.Add(this);
            foreach (var kt in KerasInputs)
            {
                if (kt.KerasHistory == null)
                {
                    continue;
                }
                var(inbound_layer, _, _) = kt.KerasHistory;
                if (inbound_layer != null)
                {
                    inbound_layer.OutboundNodes.Add(this);
                }
            }

            // Set metadata on outputs.
            var node_index = layer.InboundNodes.Count - 1;

            foreach (var(i, tensor) in enumerate(Outputs))
            {
                tensor.KerasHistory = new KerasHistory(layer, node_index, i, tensor);
            }

            // Cached for performance.
            FlatInputIds  = KerasInputs.Select(x => x.GetHashCode()).ToArray();
            FlatOutputIds = Outputs.Select(x => x.GetHashCode()).ToArray();
        }
Пример #6
0
 public override string ToString()
 => $"{Layer.Name}, {KerasInputs.Count} inputs: {string.Join(",", KerasInputs.Select(x => x.name))}";