pub struct DataLoader<D>where
D: Dataset,{ /* private fields */ }Expand description
dataset を DataLoaderConfig に従ってミニバッチへ分割する
(PyTorch torch.utils.data.DataLoader 相当)。
Implementations§
Source§impl<D> DataLoader<D>where
D: Dataset,
impl<D> DataLoader<D>where
D: Dataset,
Sourcepub fn new(
dataset: D,
config: DataLoaderConfig,
) -> Result<DataLoader<D>, DataError>
pub fn new( dataset: D, config: DataLoaderConfig, ) -> Result<DataLoader<D>, DataError>
config.batch_size == 0 は DataError::ZeroBatchSize。
dataset.validate() が失敗した場合はその結果をそのまま返す
(タプルデータセットの長さ不一致を構築時に fail-closed に拒否
する。モジュール冒頭 A08 注記)。
Sourcepub fn config(&self) -> DataLoaderConfig
pub fn config(&self) -> DataLoaderConfig
構成のコピー(DataLoaderConfig: Copy)。
Sourcepub fn iter(&self) -> Batches<'_, D> ⓘ
pub fn iter(&self) -> Batches<'_, D> ⓘ
1 epoch 分のイテレータを返す。shuffle=true のときは呼び出し
ごとに順列を引き直す(PyTorch の epoch ごと再シャッフルと同義。
モジュール冒頭「シャッフル契約」参照)。
n = self.dataset.len() から確定する添字順列 Vec<usize> は
checked_numel_for::<usize>(&[n]) で確保前にバイトサイズまで
検査してから構築する。Dataset::len() は実装者が任意の値を
返せるため(例: 要素数ゼロの Tensor::new(vec![], &[usize::MAX, 0]) から len() == usize::MAX のデータセットを作れる)、検査
なしに (0..n).collect()/shuffled_indices の Vec::with_ capacity を呼ぶと numel * size_of::<usize>() > isize::MAX で
capacity overflow パニックしうる(本番経路 panic 禁止規約
.claude/rules/coding-rust.md。PR #1867 codex-review P1 是正)。
この iter() 自体は(設計どおり)Result を返さない infallible
な API のまま維持する。検査に失敗した場合は order を空のまま
にし、shuffle=true でも with_global_rng を呼ばず(RNG を一切
消費しない)、DataError::Shape(ShapeError:: ElementCountOverflow)を Batches へ持ち越して最初の
next() 呼び出しで 1 回だけ Err として yield し、以降は
None を返す(ExactSizeIterator::len() もこの 1 件に整合させ
る。下記 Batches::next 参照)。
Sourcepub fn into_dataset(self) -> D
pub fn into_dataset(self) -> D
内部の dataset を取り出す。
Trait Implementations§
Source§impl<D> Debug for DataLoader<D>where
D: Dataset,
impl<D> Debug for DataLoader<D>where
D: Dataset,
Source§impl<'a, D> IntoIterator for &'a DataLoader<D>where
D: Dataset,
impl<'a, D> IntoIterator for &'a DataLoader<D>where
D: Dataset,
Auto Trait Implementations§
impl<D> Freeze for DataLoader<D>where
D: Freeze,
impl<D> RefUnwindSafe for DataLoader<D>where
D: RefUnwindSafe,
impl<D> Send for DataLoader<D>where
D: Send,
impl<D> Sync for DataLoader<D>where
D: Sync,
impl<D> Unpin for DataLoader<D>where
D: Unpin,
impl<D> UnsafeUnpin for DataLoader<D>where
D: UnsafeUnpin,
impl<D> UnwindSafe for DataLoader<D>where
D: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more