Bases: _OutputConversionImage
Source code in src/safeds/ml/nn/_output_conversion_image.py
| class OutputConversionImageToColumn(_OutputConversionImage):
def _data_conversion(self, input_data: ImageList, output_data: Tensor, **kwargs: Any) -> ImageDataset[Column]:
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_name" not in kwargs or not isinstance(kwargs.get("column_name"), str):
raise ValueError(
"The column_name is not set. The data can only be converted if the column_name is provided as `str` in the kwargs.",
)
if "one_hot_encoder" not in kwargs or not isinstance(kwargs.get("one_hot_encoder"), OneHotEncoder):
raise ValueError(
"The one_hot_encoder is not set. The data can only be converted if the one_hot_encoder is provided as `OneHotEncoder` in the kwargs.",
)
one_hot_encoder: OneHotEncoder = kwargs["one_hot_encoder"]
column_name: str = kwargs["column_name"]
output = torch.zeros(len(input_data), len(one_hot_encoder.get_names_of_added_columns()))
output[torch.arange(len(input_data)), output_data] = 1
im_dataset: ImageDataset[Column] = ImageDataset[Column].__new__(ImageDataset)
im_dataset._output = _ColumnAsTensor._from_tensor(output, column_name, one_hot_encoder)
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
|