pytorch学习笔记-基础篇(统计操作)
本篇主要记录一下一些基础的pytorch知识,一些基本的统计操作
常用API
1.norm 范数
# 1.norm 范数
# 不同于正则化(normalize)
# 在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小
a = torch.full([8], 1)
b = a.view(2, 4)
c = a.view(2, 2, 2)
b
'''
Out[37]:
tensor([[1, 1, 1, 1],
[1, 1, 1, 1]])
'''
c
'''
Out[38]:
tensor([[[1, 1],
[1, 1]],
[[1, 1],
[1, 1]]])
'''
# 默认类型是long,norm不支持
a = a.float()
b = b.float()
c = c.float()
# 1范数是Σ∣x∣,即对所以元素的绝对值求和
a.norm(1), b.norm(1), c.norm(1)
# Out[47]: (tensor(8.), te ...
pytorch学习笔记-基础篇(数学运算)
本篇主要记录一下一些基础的pytorch知识,一些基本的数学操作
常用API
1.矩阵内元素的加减乘除
a = torch.rand(3, 4)
b = torch.rand(4)
# 这里能加是因为会做broadcast
a+b
torch.add(a, b)
'''
a = torch.rand(3, 4)
b = torch.rand(4)
a+b
Out[3]:
tensor([[0.8518, 1.1405, 1.1919, 1.2886],
[1.4325, 1.1519, 0.6564, 1.8520],
[0.9096, 1.0659, 1.0295, 0.9981]])
torch.add(a, b)
Out[4]:
tensor([[0.8518, 1.1405, 1.1919, 1.2886],
[1.4325, 1.1519, 0.6564, 1.8520],
[0.9096, 1.0659, 1.0295, 0.9981]])
'''
# pytorch里的+ - * / 和对应的add ...
pytorch学习笔记-基础篇(拼接与拆分)
本篇主要记录一下一些基础的pytorch知识,tensor之间的拼接与拆分,主要涉及4个经典的API
一、API介绍
1. Cat(不新加维度)
# 1. cat
# 场景:两份关于成绩单的数据,现在需要合并两份成绩单
# [class 1~4, stu, scores]
# [class 5~9, stu, scores]
a = torch.rand(4, 32, 8)
b = torch.rand(5, 32, 8)
# 第一个参数的所有tensor的List,第二个参数是拼接的维度,如果不能拼接会报错
torch.cat([a, b], dim=0).shape
'''
a = torch.rand(4, 32, 8)
b = torch.rand(5, 32, 8)
torch.cat([a, b], dim=0).shape
Out[5]: torch.Size([9, 32, 8])
'''
2. Stack(新加维度)
# 2. Stack
# stack 会创建一个新的维度
a1 = torch.rand(4, 3, 16, 32)
a2 = torch.ra ...
pytorch学习笔记-基础篇(broadcast自动扩展)
本篇主要记录一下一些基础的pytorch知识,broadcast相关内容,主要特点是不复制数据地expand,但是是自动的
api简介
特点
1. expand(自动)
2. without copying data
实施方法
1. 从最小的维度开始匹配,如果前面没有维度,则在前面加 1 个维度
2. 把新建的1维数的 size 1 扩展成和目标相同的维数
以上图第二排为例,为了符合第一个tensor [4,3] 的size,第二size是[3]的tensor 经过broadcast,会首先把自己加一维变成[1,3], 然后再做维数的扩展,变成[4,3]的tensor,好和第一个可以相加
broadcast存在的意义
实际需求
比如[class,stu,scores] 这个tensor [4,32,8],现在要给所有学生加5分,我们就希望[4,32,8]和一个维度是1的tensor[5]可以直接相加,此时,使用broadcast相当于两次 unsqueeze 和一次 expand_as
内存消耗
[4,32,8] => 1024个数据,如果用ex ...
pytorch学习笔记-基础篇(维度变换)
本篇主要记录一下一些基础的pytorch知识,接上一篇文章的tensor基础,维度变换的相关的常用api
常用api
·View/reshape(改变维度)
# view 和 reshape 功能相同 会造成维度信息丢失,信息污染
a = torch.randn(4, 1, 28, 28)
# view要保证前后的 元素 个数一致
a.view(4, 28*28)
'''
a.shape
Out[24]: torch.Size([4, 1, 28, 28])
a.view(4, 28*28).shape
Out[25]: torch.Size([4, 784])
'''
a.view(4*28, 28)
'''
a.view(4*28, 28).shape
Out[26]: torch.Size([112, 28])
'''
```
#### ·Squeeze/unsqueeze(增减维度)
  **注意,可插入的维度范围(以4维的tensor为例): [-5,5)**
``` python
# 2. Squeeze u ...
pytorch学习笔记-基础篇(索引与切片)
本篇主要记录一下一些基础的pytorch知识,接上一篇文章的tensor基础,索引(index)与切片
各种索引切片方法介绍
import torch
a = torch.rand(4, 3, 28, 28)
print(a[0].shape)
print(a[0, 0].shape)
# 这里返回的是一个标量
print(a[0, 0, 2, 4])
# 索引最前/后的图片
# 前两张图片 0,1, 因此这里的输出第一维是 2
print(a[:2].shape)
# 同样,这里的输出第一维是 2,第二维是1
print(a[:2, :1, :, :].shape)
# 注意,这里的输出第一维是 2, 第二晚是从1开始(包括1)到最末,因此维数是2
print(a[:2, 1:, :, :].shape)
# 索引下标
# [a, b, c]
# [0, 1, 2] 正序
# [-3, -2, -1] 倒序
# 所以下面是从-1开始(包括-1),一共 1 维
print(a[:2, -1:, :, :].shape)
# select by step
# step = ...
pytorch学习笔记-基础篇(tensor)
本篇主要记录一下一些基础的pytorch知识,在前两节的基础上,回过头来温习一下
python与pytorch
作为深度学习的GPU加速库,pytorch没有对string类型数据对象的直接支持。
有两种方法可以去表示string(编码方式)
one-hot
Embedding
tensor数据类型介绍
pytorch的数据类型:FloatTensor, IntTensor, ByteTensor,需要注意的是:即使是同一种数据类型,在cpu和gpu(cuda)上并不能直接相互使用。下面是一些代码的具体演示,注意注释部分
import torch
# 正态分布随机初始化,方差:1
a = torch.randn(2, 3)
# torch提供的类型检测
print(a.type())
# python提供的类型检测
print(type(a))
# 参数的合法化检验
print(isinstance(a, torch.FloatTensor))
# cpu和gpu的类型不同
print(isinstance(a, torch.cuda.FloatTensor) ...
pytorch学习笔记-简单分类问题
本文主要记录分类问题的学习,以手写数字识别为例
理论
图片表示
以经典的MNIST数据集为例,里面每一张图片都是一个28*28的灰度矩阵,矩阵中的每个值的是灰度,范围是0~1,可以用flatten方法打平之后方便处理。
x[28,28] -> x[1,784]
```
#### 模型构建
  这里用三个线性函数的嵌套构造线性模型(第一节中只有单一的y=wx+b足矣),绿字说明了各参数的维度(主要原因是满足矩阵计算)

#### loss表示
  考虑到输出```Y```应该是一个```[0/1/.../9]```的矩阵,这里以`& ...
pytorch学习笔记-回归问题
pytorch学习记录,本篇主要是介绍和一个简单回归问题的demo
Pytorch框架简介
一、与tensorflow主要区别
动态图与静态图
Pytorch是动态图,tensorflow是静态图,处理和创建分离,预先定义处理过程,运行过程不能干预,对于调试过程想查看处理过程相对不方便
Pytorch能做什么
GPU加速
自动求导 例如: import torch
from torch import autograd
x = torch.tensor(1.)
a = torch.tensor(1., requires_grad=True)
b = torch.tensor(2., requires_grad=True)
c = torch.tensor(3., requires_grad=True)
y = a**2 * x + b * x + c
print('before:', a.grad, b.grad, c.grad)
grads = autograd.grad(y, [a, b, c])
print( ...
基于阿里云的智能温度计
本文详尽地描述了一个基于阿里云的智能温度计项目,功能是上报温度数据到阿里云的物联网平台,所有的代码都是“物联网零妖”这位大佬的,我改了一部分,此文旨在加以解释。如果觉得我说的不好,可以看他的原视频:https://edu.aliyun.com/course/1492?spm=5176.10731491.0.0.ZXRrm4
摘要
本系统利用51系列单片机为中心,通过ESP8266模块连接能上网的路由器,采集温湿度数据并上传阿里云,使用者可以使用手机APP或者在阿里云后台实时监控开发板所在环境温湿度。后续可以在云端对数据作分析并下发属性报文来控制其他设备对环境温度作调整,由于各种限制,本系统并未展开,目前仅可以上报温湿度数据,程序里写了相关的订阅报文,但是并没有实际设备执行。
第一章 绪论
本系统主要功能是监测温湿度数据并上传阿里云。
第二章 系统需求分析
本系统主要功能是监测温湿度数据并上传阿里云。细分一下,主要有以下需求:
获取环境温湿度
连接能上网的路由器
连接阿里云的MQTT服务器并上传属性报文。
第三章 系统软硬件设计与实现
根据需求分析,这里也同样分 ...