这是cs231n的代码,我想知道在__iter__函数的返回行中,我们能用return ((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B))替换return iter((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B))吗?因为((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B))也是生成器对象。实际上,我在这里并不完全理解iter()的函数,它只是调用生成器对象的函数__iter__并返回自身吗?我很困惑。
class Dataset(object):
def __init__(self, X, y, batch_size, shuffle=False):
"""
Construct a Dataset object to iterate over data X and labels y
Inputs:
- X: Numpy array of data, of any shape
- y: Numpy array of labels, of any shape but with y.shape[0] == X.shape[0]
- batch_size: Integer giving number of elements per minibatch
- shuffle: (optional) Boolean, whether to shuffle the data on each epoch
"""
assert X.shape[0] == y.shape[0], 'Got different numbers of data and labels'
self.X, self.y = X, y
self.batch_size, self.shuffle = batch_size, shuffle
def __iter__(self):
N, B = self.X.shape[0], self.batch_size
idxs = np.arange(N)
if self.shuffle:
np.random.shuffle(idxs)
return iter((self.X[i:i+B], self.y[i:i+B]) for i in range(0, N, B))
train_dset = Dataset(X_train, y_train, batch_size=64, shuffle=True)
val_dset = Dataset(X_val, y_val, batch_size=64, shuffle=False)
test_dset = Dataset(X_test, y_test, batch_size=64)https://stackoverflow.com/questions/71639042
复制相似问题