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