美文网首页金融风险管理
【Pytorch基础】torch基础介绍与简单卷积神经网络建模

【Pytorch基础】torch基础介绍与简单卷积神经网络建模

作者: 柳誉鸣 | 来源:发表于2020-07-10 14:21 被阅读0次

    from future import print_function
    import torch
    x=torch.Tensor(5,3)#创造未初始化矩阵
    x=torch.rand(5,3)#创造随机5*3矩阵

    print(x.size())

    y=torch.rand(5,3)
    print(x+y)
    print(torch.add(x,y))

    输出Tensor

    result=torch.Tensor(5,3)
    torch.add(x,y,out=result)
    print(y.add_(x))

    改变tensor内容的方法都要加下划线

    print(x[:,1])#输出第二列

    Tensor与numpy array共享存储空间

    import numpy as np
    a=np.ones(5)

    b=torch.from_numpy(a)
    np.add(a,1,out=a)

    print(a)

    print(b)#b随着a被改变

    启用2019年甜品级显卡1660Ti

    if torch.cuda.is_available():
    x=x.cuda()
    y=y.cuda()
    print(x+y)

    Tensor自动求导运行Autograd包,运行时定义

    Variable是其核心类,一旦完成了运算,可以调用.backward()计算梯度
    梯度记录在.grad属性中
    每个Variable拥有一个.grad_fn属性,引用了一个创建Variable的Function,
    除了用户创建的Variable其grad_fn是None
    除标量外,求导方法必须传入参数grad_output,和tensor形状匹配
    from torch.autograd import Variable
    x=Variable(torch.ones(2,2),requires_grad=True)
    y=x+2
    print(y.grad_fn)
    z=yy3
    out=z.mean()#求和再除以面积
    out.backward()
    print(x.grad)#输出对x的导数

    定义并使用神经网络

    使用最简单的GD优化

    import torch.nn as nn
    import torch.nn.functional as F
    class Net(nn.Module):
    def init(self):
    super(Net,self).init()
    self.conv1=nn.Conv2d(1,6,5)#1个输入channel,6个输出channel,55卷积核
    self.conv2=nn.Conv2d(6,16,5)
    self.fc1=nn.Linear(16
    5*5,120)
    self.fc2=nn.Linear(120,84)
    self.fc3=nn.Linear(84,10)

    def forward(self,x):
        x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))
        x=F.max_pool2d(F.relu(self.conv2(x)),2)#size写2等价于(2,2)
        x=x.view(-1,self.num_flat_features(x))#view()相当于numpy的reshape(),写-1表示不确定
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
    
    def num_flat_features(self,x):
        size=x.size()[1:]
        num_features=1
        for s in size:
            num_features*= s
        return num_features
    

    net=Net()
    print(net)

    NN的backward自动生成,模型中可学习的参数net.parameters()

    params=list(net.parameters())
    print(len(params))
    print(params[0].size())

    input=Variable(torch.randn(1,1,32,32))
    out=net(input)
    print(out)
    out.backward(torch.randn(1,10))

    output=net(input)
    target=Variable(torch.range(1,10))
    criterion=nn.MSELoss()
    loss=criterion(output,target)
    print(loss)
    net.zero_grad()
    loss.backward(retain_graph=True)#更新所有梯度

    GD法更新权重

    lr=0.001
    for f in net.parameters():
    f.data.sub_(f.grad.data*lr)

    使用RMSProp更新梯度

    import torch.optim as optim
    optimizer=optim.RMSprop(net.parameters(),lr=0.001)
    output=net(input)
    loss=criterion(output,target)
    loss.backward()
    optimizer.step()

    图像Pillow,openCV,声音scipy librosa,文本 nltk spacy转numpy.array

    相关文章

      网友评论

        本文标题:【Pytorch基础】torch基础介绍与简单卷积神经网络建模

        本文链接:https://www.haomeiwen.com/subject/pncmcktx.html