深度学习之PyTorch学习笔记一

本文是记录在学习深度学习的过程中对PyTorch框架的学习过程,

1.什么是PyTorch?为什么选择PyTorch?

PyTorch是一个开源的Python机器学习库,基于Torch, 由Facebook推出,应用于人工智能领域。PyTorch主要有两大特征:

  1. NumPy的张量计算,但使用GPU加速
  2. 基于带基自动微分系统的深度神经网络

为什么要选择PyTorch呢?下面以应用最广泛的框架TensorFlow来做个对比。首先相比于TensorFlow,PyTorch容易上手(不过据说TensorFlow2.0对新手很友好,还没有学)。其次,PyTorch支持动态图结构,图在运行时构建,方便我们进行调试;而TensorFlow的图是静态的,图先被“编译”然后再运行。

2.PyTorch的安装

学习PyTorch,首先要对PyTorch进行安装。官网地址为:https://pytorch.org/
进入官网以后,官方有教程会指导安装,我们只要对着步骤进行即可。我在ubuntu16.04下安装的,但是我一直没能在Windows上安装成功,等安装成功了我具体写下。
通过命令行安装PyTorch:(WIN10+none CUDA)

 conda install pytorch-cpu torchvision-cpu -c pytorch

3.PyTorch的基础概念

1.张量(Tensor)
几何代数中的张量是基于向量和矩阵的推广。PyTorch中的张量类似Numpy中的ndarrays,并且可以运行在GPU中加速运算。
输入以下代码:

import torch
x = torch.randn(5 , 3, dtype=torch.float)
print(x)

得到输出为:

tensor([[ 0.0153, -0.2443, 0.0689],
		[ -2.2178, 0.2219, -2.4072],
		[ 1.1662, -1.7380, 0.4382],
		[ 0.8350, -0.8182, 0.3119],
		[ 0.2905, -0.4506, -0.0618]])

2.自动求导(Autograd)
Autograd为所有Tensor上的操作提供了自动微分机制。具体是什么以后等我学到了会再介绍。

4.PyTorch实现分类问题

暂时还没怎么学,因此对着莫烦老师的教程手打了一遍分类的代码,还要接着理解才行。

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt

n_data = torch.ones(100, 2)
x0 = torch.normal(2*n_data, 1)     
y0 = torch.zeros(100)               
x1 = torch.normal(-2*n_data, 1)     
y1 = torch.ones(100)              
x = torch.cat((x0, x1), 0).type(torch.FloatTensor)  
y = torch.cat((y0, y1), ).type(torch.LongTensor)    

class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)   
        self.out = torch.nn.Linear(n_hidden, n_output)  
        
    def forward(self, x):
        x = F.relu(self.hidden(x))      
        x = self.out(x)
        return x

net = Net(n_feature=2, n_hidden=10, n_output=2)    
print(net)  

optimizer = torch.optim.SGD(net.parameters(), lr=0.02)
loss_func = torch.nn.CrossEntropyLoss()  

plt.ion()   

for t in range(100):
    out = net(x)                 
    loss = loss_func(out, y)     

    optimizer.zero_grad()   
    loss.backward()         
    optimizer.step()        

    if t % 2 == 0:
        plt.cla()
        prediction = torch.max(out, 1)[1]
        pred_y = prediction.data.numpy()
        target_y = y.data.numpy()
        plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn')
        accuracy = float((pred_y == target_y).astype(int).sum()) / float(target_y.size)
        plt.text(1.5, -4, 'Accuracy=%.2f' % accuracy, fontdict={'size': 20, 'color':  'red'})
        plt.pause(0.1)

plt.ioff()
plt.show()
```

发布了5 篇原创文章 · 获赞 0 · 访问量 2386

猜你喜欢

转载自blog.csdn.net/hzyaaa123/article/details/90116293