def _infer_keras_spec()

in source/python/neuropod/backends/keras/packager.py [0:0]


def _infer_keras_spec(names, tensors, node_name_mapping):
    """
    Function implementing the spec inference for either input or output.
    """
    reverse_node_name_mapping = {
        keras_name: name for name, keras_name in (node_name_mapping or dict()).items()
    }

    spec = []
    for keras_name, tensor in zip(names, tensors):
        # Skip the first dimension - batch size.
        dims = tuple(d.value for d in tensor.shape.dims[1:])

        if reverse_node_name_mapping:
            # If the node_name_mapping is defined, it must cover all inputs and outputs.
            name = reverse_node_name_mapping.get(keras_name)
            if name is None:
                raise ValueError(
                    "Keras input/output layer {name} is not covered by node_name_mapping."
                    "".format(name=keras_name)
                )
        else:
            name = keras_name

        spec.append(
            {"name": name, "dtype": tensor.dtype.name, "shape": ("batch_size",) + dims}
        )

    return spec