pytorch学习笔记(1)

#pytorch 的nn库
import torch.nn as nn
N,D_in,H,D_out=64,1000,100,10
#随机创建一些训练数据
x=torch.randn(N,D_in)
y=torch.randn(N,D_out)
# 可以定义一个model
model=torch.nn.Sequential(
#一个线性层,一个relu函数,一个线性层
torch.nn.Linear(D_in,H,bias=False),#,w_1*x+b_1,  bias 默认是true,
torch.nn.ReLU(),
torch.nn.Linear(H,D_out,bias=False)
)
#利用normal初始化weight
torch.nn.init.normal_(model[0].weight)
torch.nn.init.normal_(model[2].weight)
#model=model.cuda()#当需要在GPU上运行时需要添加该代码
loss_fn=nn.MSELoss(reduction='sum')#定义lossfuntion为MSEloss
learning_rate=1e-4 #设置学习率,Adam优化的lr是1e-4左右
#定义优化器
optimizer=torch.optim.Adam(model.parameters(),lr=learning_rate)#将model的所有参数传给Adam,除了Adam,常见的还有SGD

for it in range(500):
   ##Forward pass
   y_pred=model(x)#等价于model.forward(x)
   #compute loss
   #loss=loss_fn(y_pred-y).pow(2).sum()
   
   #model.zero_grad()##每次计算后将所有的grad清零,避免叠加
   loss=loss_fn(y_pred,y)#computation graph
   optimizer.zero_grad()#每次计算后将grad清零
   print(it,loss.item())#.item(),如果你只有一个元素的tensor,使用.item()方法可以把里面的value变成Python数值。
   ##backward pass
   loss.backward()
   ##update model parameters
   optimizer.step()
   #with torch.no_grad():
        #for param in model.parameters():##param(tensor,grad)
        #param-=learning_rate*param.grad
        
    



备注: model模型的初始化和结果有关

model[0].weight#查看第一层的权重
#可以将weight初始化为normal
torch.nn.init.normal_(model[0].weight)
torch.nn.init.normal_(model[2].weight)
model[0].bias#查看第一层的bias

pytorch optim(优化方法)

#定义优化器
#语法
   # optimizer=torch.optim.方法名(要优化的模型参数,学习率)
optimizer =torch.optim.Adam(model.parameters(),lr=learning_rate)#将model的所有参数传给Adam,除了Adam,常见的还有SGD

自定义一个model

class TwoLayerNet(torch.nn.Module):
    def __init__(self,D_in,H,D_out):
       super(TwoLayerNet,self).__init__()
       #所有的module写到init里面,每一个有导数的层都放到init里
       #定义模型框架
       self.linear1=torch.nn.Linear(D_in,H,bias=False)
       self.linear2=torch.nn.Linear(H,D_out,bias=False)
    def forward(self,x):
       #定义前向传播过程
       y_pred=self.linear2(self.linear1(x).clamp(min=0))
       return y_pred
model=TwoLayerNet(D_in,H,D_out)

总结

  1. 定义输入和输出的数据
  2. 定义模型
  3. 定义loss function
  4. 将模型交给optimizer进行优化(Adam,SGD…)
  5. 进行训练:
    ForWard Pass->Compute Pass->BackWard Pass->Update Model Parameters.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值