本文主要是记录一些pytorch的基本使用,将持续更新。。。。
#查看形状
torch.size()
#改变形状
torch.view()
#和numpy互相转化
x.numpy()
torch.from_numpy()
训练流程:
#使用gpu训练,把数据和网络传入gpu即可
device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model.to(device)
inputs.to(device)
out.to(device)
#定义优化器和损失函数
optimizer=torch.optimizer.SGD(model.parameters(),lr=0.01)
criterion=torch.nn.MSELoss()
for epoch in epochs:
epoch+=1
#梯度清零
optimizer.zero_grad()
#前向传播
out=model(inputs)
#计算损失
loss=criterion(out,labels)
#反响传播
loss.backward()
#更新权重
optimizer.step()
if epoch%50==0:
print(loss.item())
#模型保存与加载
torch.save(model.state_dict(),'model.pkl')
model.load_state_dict(torch.load('model.pkl'))
**
hub模块的使用:
显示可加载模型列表&加载模型。
torch.hub.list('pytorch/vision')
torch.hub.load('pytorch/vision', 'alexnet', pretrained=False)
**
使用tensordataset和dataloader加载数据。
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
train_ds=TensorDataset(x_train,Y_train)
train_dl=DataLoader(train_ds,batch_size=batches)
for xb,yb in train_dl:
开始喂入数据,训练模型
model.train()和model.eval()的使用区别:
model.train()#训练网络模型的时候,启用batchnormsize和dropout
model.eval()#测试模型的时候,关闭batchnormsize和dropout
函数:
tensor.squeeze() #去掉tensor中维度为1的维度
tensor转numpy,
tensor.cpu()#tensor转numpy需要先将tensor转到cpu上,
tensor.numpy()#当tensor的require_grad为FLSE时
tensor.detach().numpy()#当tensor的require_grad为TRUE时
torch.chunk()方法可以对张量分块,返回一个张量列表:
rearrange(t, ‘b n (h d) -> b h n d’, h = h)
torch.einsum(‘bhid,bhjd->bhij’, q, k)