polars.DataFrame.to_torch
-
Преобразует DataFrame в тензор PyTorch, Dataset или словарь тензоров.
Добавлено в версии 0.20.23.
Предупреждение
В настоящее время эта функциональность считается нестабильной. Она может быть изменена в любой момент без того, чтобы это считалось несовместимым изменением.
- Параметры:
-
-
return_type{“tensor”, “dataset”, “dict”} -
Задаёт тип возвращаемого значения: тензор PyTorch, PolarsDataset (TensorDataset, специализированный для фреймов) или словарь тензоров.
- label
-
Одно или несколько имён столбцов, выражений или селекторов, задающих данные меток; если
return_typeравно «dataset», PolarsDataset будет возвращать(features, label)кортежи тензоров для каждой строки. В противном случае он возвращает(features,)кортежи тензоров, в которых признаки содержат все данные строки. - features
-
Одно или несколько имён столбцов, выражений или селекторов, содержащих данные признаков; если параметр не указан, используются все столбцы, не назначенные метками.
- dtype
-
Приводит dtype всех возвращаемых тензоров к единому типу; перед преобразованием в Tensor столбцы, тип которых не совпадает с требуемым, приводятся к нему. Это относится и к столбцу меток, если только метка не является выражением (например,
pl.col("label_column").cast(pl.Int16)).
-
См. также
Примеры
>>> df = pl.DataFrame( ... { ... "lbl": [0, 1, 2, 3], ... "feat1": [1, 0, 0, 1], ... "feat2": [1.5, -0.5, 0.0, -2.25], ... } ... )Стандартный тип возвращаемого значения (Tensor) с супертипом f32:
>>> df.to_torch(dtype=pl.Float32) tensor([[ 0.0000, 1.0000, 1.5000], [ 1.0000, 0.0000, -0.5000], [ 2.0000, 0.0000, 0.0000], [ 3.0000, 1.0000, -2.2500]])В виде словаря отдельных тензоров:
>>> df.to_torch("dict") {'lbl': tensor([0, 1, 2, 3]), 'feat1': tensor([1, 0, 0, 1]), 'feat2': tensor([ 1.5000, -0.5000, 0.0000, -2.2500], dtype=torch.float64)}В виде словаря «label» и «features»; обратите внимание: поскольку «features» не задан, по умолчанию используются все столбцы, которых нет в «label»:
>>> df.to_torch("dict", label="lbl", dtype=pl.Float32) {'label': tensor([[0.], [1.], [2.], [3.]]), 'features': tensor([[ 1.0000, 1.5000], [ 0.0000, -0.5000], [ 0.0000, 0.0000], [ 1.0000, -2.2500]])}В виде PolarsDataset с супертипом f64:
>>> ds = df.to_torch("dataset", dtype=pl.Float64) >>> ds[3] (tensor([ 3.0000, 1.0000, -2.2500], dtype=torch.float64),) >>> ds[:2] (tensor([[ 0.0000, 1.0000, 1.5000], [ 1.0000, 0.0000, -0.5000]], dtype=torch.float64),) >>> ds[[0, 3]] (tensor([[ 0.0000, 1.0000, 1.5000], [ 3.0000, 1.0000, -2.2500]], dtype=torch.float64),)Для удобства в PolarsDataset можно включить использование данных с половинной точностью для экспериментов (обычно эта настройка задаётся для модели или конвейера):
>>> list(ds.half()) [(tensor([0.0000, 1.0000, 1.5000], dtype=torch.float16),), (tensor([ 1.0000, 0.0000, -0.5000], dtype=torch.float16),), (tensor([2., 0., 0.], dtype=torch.float16),), (tensor([ 3.0000, 1.0000, -2.2500], dtype=torch.float16),)]
Передача PolarsDataset в DataLoader с указанием метки:
>>> from torch.utils.data import DataLoader >>> ds = df.to_torch("dataset", label="lbl") >>> dl = DataLoader(ds, batch_size=2) >>> batches = list(dl) >>> batches[0] [tensor([[ 1.0000, 1.5000], [ 0.0000, -0.5000]], dtype=torch.float64), tensor([0, 1])]Обратите внимание, что метки можно задавать в виде выражений, благодаря чему их dtype может отличаться от dtype столбцов признаков (поддерживаются метки из нескольких столбцов).
>>> ds = df.to_torch( ... return_type="dataset", ... dtype=pl.Float32, ... label=pl.col("lbl").cast(pl.Int16), ... ) >>> ds[:2] (tensor([[ 1.0000, 1.5000], [ 0.0000, -0.5000]]), tensor([0, 1], dtype=torch.int16))Простая интеграция, например, со scikit-learn и другими наборами данных:
>>> from sklearn.datasets import fetch_california_housing >>> housing = fetch_california_housing() >>> df = pl.DataFrame( ... data=housing.data, ... schema=housing.feature_names, ... ).with_columns( ... Target=housing.target, ... ) >>> train = df.to_torch("dataset", label="Target") >>> loader = DataLoader( ... train, ... shuffle=True, ... batch_size=64, ... )
DataFrame.to_torch(
return_type: TorchExportType = 'tensor',
*,
label: str | Expr | Sequence[str | Expr] | None = None,
features: str | Expr | Sequence[str | Expr] | None = None,
dtype: PolarsDataType | None = None,
) → torch.Tensor | dict[str, torch.Tensor] | PolarsDataset
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/dataframe/api/polars.DataFrame.to_torch.html