PyTorch 的 DataLoader() 中的 next() 和 iter() 做了什么
What does next() and iter() do in PyTorch's DataLoader()
我有以下代码:
import torch
import numpy as np
import pandas as pd
from torch.utils.data import TensorDataset, DataLoader
# Load dataset
df = pd.read_csv(r'../iris.csv')
# Extract features and target
data = df.drop('target',axis=1).values
labels = df['target'].values
# Create tensor dataset
iris = TensorDataset(torch.FloatTensor(data),torch.LongTensor(labels))
# Create random batches
iris_loader = DataLoader(iris, batch_size=105, shuffle=True)
next(iter(iris_loader))
上面代码中的next()
和iter()
做了什么?我经历了 PyTorch's documentation 并且仍然可以完全理解 next()
和 iter()
在这里做什么。谁能帮忙解释一下?非常感谢。
这些是 python 的内置函数,它们用于处理可迭代对象。
基本上 iter()
调用 iris_loader
上的 __iter__()
方法,returns 是一个迭代器。 next()
然后调用该迭代器上的 __next__()
方法以获得第一次迭代。 运行 next()
再次获取迭代器的第二项,等等
这种逻辑经常发生 'behind the scenes',例如当 运行 一个 for
循环时。它在迭代器上调用 __iter__()
方法,然后在返回的迭代器上调用 __next__()
直到它到达迭代器的末尾。然后它引发 stopIteration
并且循环停止。
有关详细信息和一些细微差别,请参阅文档:https://docs.python.org/3/library/functions.html#iter
我有以下代码:
import torch
import numpy as np
import pandas as pd
from torch.utils.data import TensorDataset, DataLoader
# Load dataset
df = pd.read_csv(r'../iris.csv')
# Extract features and target
data = df.drop('target',axis=1).values
labels = df['target'].values
# Create tensor dataset
iris = TensorDataset(torch.FloatTensor(data),torch.LongTensor(labels))
# Create random batches
iris_loader = DataLoader(iris, batch_size=105, shuffle=True)
next(iter(iris_loader))
上面代码中的next()
和iter()
做了什么?我经历了 PyTorch's documentation 并且仍然可以完全理解 next()
和 iter()
在这里做什么。谁能帮忙解释一下?非常感谢。
这些是 python 的内置函数,它们用于处理可迭代对象。
基本上 iter()
调用 iris_loader
上的 __iter__()
方法,returns 是一个迭代器。 next()
然后调用该迭代器上的 __next__()
方法以获得第一次迭代。 运行 next()
再次获取迭代器的第二项,等等
这种逻辑经常发生 'behind the scenes',例如当 运行 一个 for
循环时。它在迭代器上调用 __iter__()
方法,然后在返回的迭代器上调用 __next__()
直到它到达迭代器的末尾。然后它引发 stopIteration
并且循环停止。
有关详细信息和一些细微差别,请参阅文档:https://docs.python.org/3/library/functions.html#iter