pytorch 基础学习--自用笔记(一)

#导入必要的库
import torch
import numpy as np

torch 基本处理单元

# 返回的数组大小5x4的矩阵
torch.Tensor(5, 4)

pytorch 基础学习--自用笔记(一)_第1张图片

# 返回的数组大小是5x4的矩阵,初始化是0~1的均匀分布
torch.rand(5, 4)

pytorch 基础学习--自用笔记(一)_第2张图片

# 得到矩阵大小
a = torch.rand(5, 4)
a.size()

在这里插入图片描述

# numpy 类似的返回5x4大小的矩阵
np.ones((5, 4))

pytorch 基础学习--自用笔记(一)_第3张图片

# numpy 和 torch.Tensor 之间的转换
a = torch.rand(5, 4)
b = a.numpy()
print(b)

pytorch 基础学习--自用笔记(一)_第4张图片

a = np.array([[3, 4], [3, 6]])
b = torch.from_numpy(a)
print(b)

pytorch 基础学习--自用笔记(一)_第5张图片

运算和numpy类似

x = torch.rand(5, 4)
y = torch.rand(5, 4)
c = 3


print(c * x)

pytorch 基础学习--自用笔记(一)_第6张图片

print(x + y)

pytorch 基础学习--自用笔记(一)_第7张图片

print(x.add(y))

pytorch 基础学习--自用笔记(一)_第8张图片

# 可以直接进行操作改变原对象,x+y或者x.add()并不会改变x,但是x.add_()则会对x进行改变
x.add_(y)

pytorch 基础学习--自用笔记(一)_第9张图片

print(x)

pytorch 基础学习--自用笔记(一)_第10张图片

将 torch.Tensor 放到 GPU 上

# 判断一下电脑是否支持GPU
torch.cuda.is_available()

在这里插入图片描述

a = torch.rand(5, 4)
a = a.cuda()
print(a)

pytorch 基础学习--自用笔记(一)_第11张图片

### torch 的自动求导功能
torch 和大部分框架一样有着自动求导功能,对象不再是 torch.Tensor,而是torch.autograd.Variable

本质上Variable和Tensor没有什么区别,不过Variable会放在一个计算图里面,可以进行前向传播和反向传播以及求导  

from torch.autograd import Variable
# requires_grad 表示是否对其求梯度,默认是False
x = Variable(torch.Tensor([3]), requires_grad=True)
y = Variable(torch.Tensor([5]), requires_grad=True)
z = 2 * x + y + 4
# 对 x 和 y 分别求导
z.backward()
# x 的导数和 y 的导数
print('dz/dx: {}'.format(x.grad.data))
print('dz/dy: {}'.format(y.grad.data))

pytorch 基础学习--自用笔记(一)_第12张图片

### 神经网络部分

所依赖的主要是 torch.nn 和 torch.nn.functional

torch.nn 里面有着所有的神经网络的层的操作,其用来构建网络,只有执行一次网络的运算才执行一次

torch.nn.functional 表示的是直接对其做一次向前运算操作

from torch import nn
import torch.nn.functional as F
# 基本的网络构建类模板
class net_name(nn.Module):
    def __init__(self):
        super(net_name, self).__init__()
        # 可以添加各种网络层
        self.conv1 = nn.Conv2d(3, 10, 3)
        # 具体每种层的参数可以去查看文档
        
    def forward(self, x):
        # 定义向前传播
        out = self.conv1(x)
        return out

你可能感兴趣的:(pytorch,python,学习)