| 866 | return output_tensors |
| 867 | |
| 868 | def get_config(self): |
| 869 | if not self._is_graph_network: |
| 870 | raise NotImplementedError |
| 871 | |
| 872 | config = { |
| 873 | 'name': self.name, |
| 874 | } |
| 875 | node_conversion_map = {} |
| 876 | for layer in self.layers: |
| 877 | kept_nodes = 1 if _should_skip_first_node(layer) else 0 |
| 878 | for original_node_index, node in enumerate(layer._inbound_nodes): |
| 879 | node_key = _make_node_key(layer.name, original_node_index) |
| 880 | if node_key in self._network_nodes: |
| 881 | node_conversion_map[node_key] = kept_nodes |
| 882 | kept_nodes += 1 |
| 883 | layer_configs = [] |
| 884 | for layer in self.layers: # From the earliest layers on. |
| 885 | layer_class_name = layer.__class__.__name__ |
| 886 | layer_config = layer.get_config() |
| 887 | |
| 888 | filtered_inbound_nodes = [] |
| 889 | for original_node_index, node in enumerate(layer._inbound_nodes): |
| 890 | node_key = _make_node_key(layer.name, original_node_index) |
| 891 | if node_key in self._network_nodes: |
| 892 | # The node is relevant to the model: |
| 893 | # add to filtered_inbound_nodes. |
| 894 | if node.arguments: |
| 895 | kwargs = _serialize_tensors(node.arguments) |
| 896 | try: |
| 897 | json.dumps(kwargs) |
| 898 | except TypeError: |
| 899 | logging.warning( |
| 900 | 'Layer ' + layer.name + |
| 901 | ' was passed non-serializable keyword arguments: ' + |
| 902 | str(node.arguments) + '. They will not be included ' |
| 903 | 'in the serialized model (and thus will be missing ' |
| 904 | 'at deserialization time).') |
| 905 | kwargs = {} |
| 906 | else: |
| 907 | kwargs = {} |
| 908 | if node.inbound_layers: |
| 909 | node_data = [] |
| 910 | for inbound_layer, node_id, tensor_id, _ in node.iterate_inbound(): |
| 911 | node_key = _make_node_key(inbound_layer.name, node_id) |
| 912 | new_node_index = node_conversion_map.get(node_key, 0) |
| 913 | node_data.append( |
| 914 | tf_utils.ListWrapper( |
| 915 | [inbound_layer.name, new_node_index, tensor_id, kwargs])) |
| 916 | node_data = nest.pack_sequence_as(node.input_tensors, node_data) |
| 917 | if not nest.is_sequence(node_data): |
| 918 | node_data = [node_data] |
| 919 | # Convert ListWrapper to list for backwards compatible configs. |
| 920 | node_data = tf_utils.convert_inner_node_data(node_data) |
| 921 | filtered_inbound_nodes.append(node_data) |
| 922 | |
| 923 | layer_configs.append({ |
| 924 | 'name': layer.name, |
| 925 | 'class_name': layer_class_name, |