DataLoader
現在、numpy 配列をバッチ処理するために使用したい次のような状況があります。
import numpy as np
import torch
import torch.utils.data as data_utils
# Create toy data
x = np.linspace(start=1, stop=10, num=10)
x = np.array([np.random.normal(size=len(x)) for i in range(100)])
print(x.shape)
# >> (100,10)
# Create DataLoader
input_as_tensor = torch.from_numpy(x).float()
dataset = data_utils.TensorDataset(input_as_tensor)
dataloader = data_utils.DataLoader(dataset,
batch_size=100,
)
batch = next(iter(dataloader))
print(type(batch))
# >> <class 'list'>
print(len(batch))
# >> 1
print(type(batch[0]))
# >> class 'torch.Tensor'>
batch
はすでに であると予想していtorch.Tensor
ます。今のところbatch[0]
、Tensor を取得するためにバッチにインデックスを付けていますが、これはあまりきれいではなく、コードが読みにくくなっていると感じています。
DataLoader
が と呼ばれるバッチ処理関数を使用することがわかりましたcollate_fn
。ただし、設定は、唯一のエントリが Tensor としてのバッチでdata_utils.DataLoader(..., collage_fn=lambda batch: batch[0])
あるタプルにリストを変更するだけです。(tensor([ 0.8454, ..., -0.5863]),)
バッチをテンソルにエレガントに変換する方法を見つけるのを手伝ってくれて、私を大いに助けてくれます (バッチ内の単一のエントリにインデックスを付けても問題ないことを教えてくれる場合でも)。