pytorch使用dataset和dataloader加载数据集

数据集:batch计算-》加快计算速度;single计算-》越过鞍点

single可以得到更好的结果但是无法充分利用cpu的并行能力

mini batch综合两者优势。

epoch:一次所有数据参与训练;

batch-size:每次参与训练的样本数量;

interation:内层迭代的次数;batch的个数

1.作用:加载数据集

2.dataset:数据集支持索引

抽象类,不能直接实例化,要创建类继承

class MyDataset(Dataset):
    def __init__(self, filepath):
        xy = np.loadtxt(filepath, delimiter=',', dtype=np.float32)
        self.len = xy.shape[0] # shape(多少行,多少列)
        self.x_data = torch.from_numpy(xy[:, :-1])#x取前面所有列
        self.y_data = torch.from_numpy(xy[:, [-1]])#y取最后一列

    #索引按位取值
    def __getitem__(self, index):
        return self.x_data[index], self.y_data[index]
     
    #返回数据集大小
    def __len__(self):
        return self.len
 
#实例化新类 
dataset = MyDataset('diabetes.csv')

3.dataloader:支持mini batch

train_loader = DataLoader(dataset=dataset, batch_size=32, shuffle=True, num_workers=0) 

参数:

dataset:数据集

batch-size:批量大小

shuffle:每个epoch的打乱数据顺序

num workers:多线程数目

4.mini-batch双层嵌套训练

for epoch in range(100):
        for i, data in enumerate(train_loader, 0): # train_loader 是先shuffle后mini_batch
            #prepare dataset
            inputs, labels = data
            #forword
            y_pred = model(inputs)
            loss = criterion(y_pred, labels)
            print(epoch, i, loss.item())
            #backword
            optimizer.zero_grad()
            loss.backward()
            #update
            optimizer.step()

报错更正:

if __name__ == '__main__':
    for epoch in range(100):
        for i, data in enumerate(train_loader, 0):

pytorch使用dataset和dataloader加载数据集_第1张图片

 

你可能感兴趣的:(pytorch,人工智能,python)