数据集: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):