Skip to content

OutputConversionImageToTable

Bases: _OutputConversionImage

Source code in src/safeds/ml/nn/_output_conversion_image.py
class OutputConversionImageToTable(_OutputConversionImage):

    def _data_conversion(self, input_data: ImageList, output_data: Tensor, **kwargs: Any) -> ImageDataset[Table]:
        import torch

        _init_default_device()

        if not isinstance(input_data, _SingleSizeImageList):
            raise ValueError("The given input ImageList contains images of different sizes.")  # noqa: TRY004
        if (
            "column_names" not in kwargs
            or not isinstance(kwargs.get("column_names"), list)
            and all(isinstance(element, str) for element in kwargs["column_names"])
        ):
            raise ValueError(
                "The column_names are not set. The data can only be converted if the column_names are provided as `list[str]` in the kwargs.",
            )
        column_names: list[str] = kwargs["column_names"]

        output = torch.zeros(len(input_data), len(column_names))
        output[torch.arange(len(input_data)), output_data] = 1

        im_dataset: ImageDataset[Table] = ImageDataset[Table].__new__(ImageDataset)
        im_dataset._output = _TableAsTensor._from_tensor(output, column_names)
        im_dataset._shuffle_tensor_indices = torch.LongTensor(list(range(len(input_data))))
        im_dataset._shuffle_after_epoch = False
        im_dataset._batch_size = 1
        im_dataset._next_batch_index = 0
        im_dataset._input_size = input_data.sizes[0]
        im_dataset._input = input_data
        return im_dataset