图像去雾毕业论文准备14-深度学习框架(pytorch)——超级详细(基础知识)

图像去雾毕业论文准备14-深度学习框架(pytorch)——超级详细(基础知识)

torch常见的数据类型
在这里插入图片描述

#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Time    : 2021/1/5 21:41
# @Author  : ptg
# @Email   : zhxwhchina@163.com
# @File    : pytorch基础知识.py
# @Software: PyCharm

import torch

# 0-1之间的均匀分布
x = torch.rand(2,3)
print(x)

# 正常随机数
x =torch.randn(3,4)
print(x)

# zeros
x = torch.zeros(2,3)
print(x)

x = torch.ones(2,3,4)
print(x)


print(x.size(0))
print(x.size(1))

# tensor类型,加上float32数据类型
x = torch.tensor([6,2],dtype=torch.float32)
print(x)
# 数据类型的转换
print(x.type())

# 数据类型的转换
a = x.type(torch.int64)
print(a)
print(a.type())


"""
tensor与ndarray数据类型的转换
"""
import numpy as np
a = np.random.randn(2,3)
print(a)

# 可以从numpy数组中创建(从numpy转到tensor中)
x1 = torch.from_numpy(a)
print(x1)

# 从tensor转到numpy
print(x1.numpy())
# 广播相加
x4 = x3 + 2
print(x4)
x5 = x4.add(x1)
print(x5)
print("x4",x4)

# 当一个运算符后面加上一个下划线的时候,就地改变这个数
x4 = x4.add_(x1)
print("x41",x4)
print(x4.shape)

# view可以改变数据的输出形式
x4 = x4.view(3,2)
print(x4)

x4.view(2,3)
print(x4)

# 自动计算(第二个维度为1)
x5 = x4.view(-1,1)
print(x5)

# item返回一个标量值,通过item以后返回的就是一个标量而不是一个tensor值
x5 = torch.rand(1)
x6 = x5.item()
print(x6)

具体的就不讲了,看简单的注释吧,继续往后推进!

好啦,下面着重介绍一下

张量的自动微分

在这里插入图片描述
tensor里面有数据,grad(计算的梯度),grad_fn(用什么方法计算得到的)

"""
张量的自动微分
将torch.tensor属性.requires_grad设置成True
pytor将开始跟踪对此张量的所有操作
完成计算后,可以调用.backward()并自动计算苏欧欧梯度
该张量的梯度将累加到.grad属性中
"""
# requires_grad=True跟踪所有的运算
x = torch.ones(2,2,requires_grad=True)
print(x)

下面是用过back.ward进行跟踪对象

"""
因为不是通过某种计算得到的,所以梯度和计算方法返回值都是空值
下面使用一个简单的计算进行查看,看看到底有什么变化
"""
# 广播相加(y是通过相加得到的)
y = x + 2
print(y)
print(y.data)

# 可以看到梯度还是没有
print(y.grad)

# 但是计算方法输出了数值,一个内存占用单元》<AddBackward0 object at 0x000002546F3CFDC8>
print(y.grad_fn)
print("-."*20)
# z = y*y + 3
z = y*y + 3
out = z.mean()
print(out)
print(out.backward())

# 以上计算的所梯度都记录在x中
print(x.grad)
"""
结果如下:
tensor([[1.5000, 1.5000],
        [1.5000, 1.5000]])
"""
# x的值仍然是1,没有进行改变
print(x.data)

当然,这里需要提到的是requires_grad=True必须是true才可以进行跟踪

如果有的地方不用进行跟踪,那么可以使用包装的形式

with torch.no_grad():
    print((x**2).requires_grad)

print((x**2).requires_grad)

# 如果不用计算梯度,可以使用x.detach()进行 等价于with torch.no_grad
y = x.detach()
print(y)

print("--."*20)
# 假如有一个使用的不计算梯度的false
a = y.requires_grad
print(a)

f = torch.tensor([2,3],dtype=torch.float32)
print("f",f)
# 可以看到是false
print(f.requires_grad)
# 可以就地改变tensor的grad属性
c = f.requires_grad_(True)
# 可以看到就地改变后输出的是True
"""
False
f tensor([2., 3.])
False
True
"""
print(c.requires_grad)

好啦,基础的介绍和学习就到这里!
(完!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值