pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片
常见的学习种类
线性回归,最简单的y=wx+b型的,就像是调节音量大小。逻辑回归,是否问题。分类问题,是猫是狗是猪
最简单的线性回归y=wx+b
目的:给定大量的(x,y)坐标点,通过机器学习来找出最符合的权重w和偏置b
损失指的是每个点进行wx+b-y然后平方累加,是用来估量模型的预测值f(x)与真实值Y的不一致程度。
根本的方法是首先要给出人工设定初始的w和b值,然后计算损失对于w和对于b的梯度,来找到下降梯度。
使得w和b往下降梯度变化来使得损失越来越小,w和b的值越来越精确的过程。
lr是学习效率,人为设定的值,学习效率乘以损失在w和b上的倒数相当于是下一代w和b所走的步长
通过迭代来使w和b往下降方向走,且每一次更新w‘和b'的值然后计算损失再迭代。
红字手写计算出w和b的更新值(w和b的倒数)得公式
对于手写数字的识别
对于数字1的正确对应的是[0,1,0,....,0]对于数字3正确对应的是[0,0,0,3,0,.....,0]
pytorch数据类型与创建tensor
import torch
import numpy as np
a=torch.tensor(3.33)
print(a)
print(a.type()) #使用type()来查看当前的数据类型
print(isinstance(a,torch.FloatTensor)) #查看是不是浮点型的
#注意数据类型是分cpu型和gpu型号的,不同的是不同的 #生成标量,维度是0的
b=torch.tensor(2.2)
print(b.shape)
print(b.size()) #生成向量,维度为1的
c=torch.tensor([2.2])
print('一维向量且只有一个元素',c)
c=torch.tensor([2.2,3.3,4.4])
print('一维向量3个元素',c)
c=torch.FloatTensor(1)
print('随机生成一维向量1个元素',c)
c=torch.FloatTensor(2)
print('随机生成一维向量两个元素',c)
numpydata=np.array([1,2,3])
c=torch.from_numpy(numpydata)
print('从numpy导入',c) #生成向量,维度为2的 (二维的应用场景,比如(2,3)表示的是有两个数字,每个数字用一个三维向量表示)
d=torch.randn(2,3) #正态分布生成2行3列的浮点数阵
print(d)
print(d.size())
print('注意,size可以索引',d.size(0)) #生成向量,维度为3的 (三维德应用场景比如(3,3,3)。一个句子有有三个字,然后有三个句子,每一个字用一个三维向量表示)
e=torch.rand(3,3,3) #正态分布生成3行3列的浮点数阵
print(e)
print('注意,e可以索引',e[0])
#可以用list直接把e.shape转成 #生成向量,维度为4的 (四维德应用场景图片比如(3,3,4,4)。有三张照片,每个照片有三个通道(rgb),然后每一个通道的长宽是4*4)
f=torch.rand(2,2,4,4) #正态分布生成3行3列的浮点数阵
print(f) #获取具体元素个数,所占大小
print(e.numel())
#获取维度
print(e.dim())
#torch.tensor()里面直接给numpy的数据
#torch.FloatTensor()里面给shape的形式如torch.FloatTensor(2,3) #生成未初始化的
# 推荐使用的是torch.FloatTensor()类型,比如
cd=torch.FloatTensor(2,2,4,4)
print('这里是FloatTensor生成未初始化的',cd)
#推荐使用的是torch.IntTensor()类型,比如
cd=torch.IntTensor(2,2)
print('这里是IntTensor生成未初始化的',cd) #设置成更加高精度的tensor类型
torch.set_default_tensor_type(torch.DoubleTensor)
#0---1之间生成随机数
a=torch.rand(3,3)
#把a的shape读出来然后再放进torch.rand
torch.rand_like(a)
#区间之间生成随机数
sd=torch.randint(1,9,(3,3))
print(sd)
#使用torch.normal生成,mean=torch.full([10],0)代表生成10个为0的数。std=torch.arange(1,0,-0.1)代表生成数的方差从1到0每次减0.1
# pc=torch.normal(mean=torch.full([10],0),std=torch.arange(1,0,-0.1))
# print(pc) #生成全部为某个数的tensor
print(torch.full([2,3],5))
#arange生成区间内的数
print(torch.arange(0,10,2))
#linspace等分生成区间内的数,4为切成四块
print(torch.linspace(0,10,4))
#生成全部是1的
print(torch.ones(3,3))
#生产全部是0的
print(torch.zeros(3,3))
#生成对角阵
print(torch.eye(3,3))
#随机打乱生成区间
print('randperm打乱',torch.randperm(10))
索引与切片
import torch
import numpy as np a=torch.rand(3,3,5,5)
#假设是3张图片,3个通道,每个通道的长5宽5
print(a)
print('站在某一张图片的立场上看shape',a[0].shape)
print('站在开头到1图片的立场上看shape',a[:2].shape)
print('站在某一个通道的立场上看shape',a[0,0].shape)
print('看第一张图的第一个通道的(1,1)像素点',a[0,0,1,1])
print('看第一张图的第一个通道的(0,0)(0,1)(1,0)(1,1)像素点',a[0,0,:2,:2])
print('隔行采样看第一张图的第一个通道的(0,0)(0,2)(2,0)(2,2)像素点,步长为2',a[0,0,:3:2,:3:2]) #使用index_select索引
print('使用index_select索引',a.index_select(0,torch.tensor([0,1])))#第一个0代表的是对图片维度执行操作,采集的是第一个和第二个图片
print('使用index_select索引',a.index_select(1,torch.tensor([0,1])))#第一个0代表的是对通道执行操作,采集的是第一个和第二个通道 #mask掩码
sd=torch.rand(3,3)
print('未掩码前',sd)
sdmask=sd.ge(0.5) #筛选出大于0.5的
print('掩码后',sdmask)
print('筛选出大于0.5的',torch.masked_select(sd,sdmask))
维度操作
#维度变换
import torch
import numpy as np #改变形状
a=torch.rand(3,3,5,5)
print(a)
#假设是3张图片,3个通道,每个通道的长5宽5 元素的总大小是3*3*5*5=225
b=a.reshape(3,3*25) #只要元素的总大小不变都能reshape
print('改成3行75列的矩阵',b) #将3张图片每张图片用75的向量来表示 #增加维度
a=torch.rand(3,3,5,5)
a=a.unsqueeze(0) #在a的0索引前面加上一个维度1。
#假设原来是3张图片,3个通道,每个通道的长5宽5 ,现在是1个组里有3张图片,3个通道,每个通道的长5宽5
print(a.shape)
a=a.unsqueeze(-1) #在a的-1索引后面加上一个维度1。
print(a.shape) #减少维度
sd=torch.rand(1,5,1,1)
print('无输入数字时会把所有的1的维度全给他删除了',sd.squeeze().shape)
print('输入数字时会把指定的1的维度删除了',sd.squeeze(2).shape) #增加维度内的元素,也就是[1,5,1,1]变成[4,5,3,3]的过程
#!!!!!注意1变N是可以的,但是5变N是不行的!!!!!
sd=torch.rand(1,5,1,1)
print(sd.expand(4,5,3,3).shape) #矩阵转置,只能使用2d的
sd1=torch.rand(4,5)
print(sd1.t().shape) #确认两个tensor的一致性
t1=torch.tensor([1,2,3])
t2=torch.tensor([1,2,3])
print('检查一致性',torch.all(torch.eq(t1,t2))) #维度变化与恢复
a=torch.rand(3,3,5,5)
a1=a.transpose(1,2).contiguous().reshape(3,75).reshape(3,5,3,5).transpose(1,2) #transport变化时记得写contiguous
print('检查变化前后是否相同',torch.all(torch.eq(t1,t2)))
自动拓展示例
四张图片,三个通道,每个通道32*32个像素点
在[4,3,32,32]上加[32,32]代表的是在每个通道的32*32的像素点上加上一组32*32的基地
在[4,3,32,32]上加[3,1,1]代表的是对每一个通道的每一个像素点都加上一个固定的值
在[4,3,32,32]上加[1,1,1,1]代表的是对所有的照片的所有的通道的长宽都加上一个固定的值
pytorch——不用包模拟简单线性预测,数据类型,创建tensor,索引与切片的更多相关文章
- 数据类型&字符串得索引及切片
一:数据类型 1):int 1,2,3用于计算 2):bool ture false 用于判断,也可做为if的条件 3):str 用引号引起来的都是str 存储少量数据,进行 ...
- pandas之DataFrame创建、索引、切片等基础操作
知识点 Series只有行索引,而DataFrame对象既有行索引,也有列索引 行索引,表明不同行,横向索引,叫index,0轴,axis=0 列索引,表明不同列,纵向索引,叫columns,1轴,a ...
- NS2仿真:使用NS仿真软件模拟简单网络模型
NS2仿真实验报告1 实验名称:使用NS仿真软件模拟简单网络模型 实验日期:2015年3月2日~2015年3月7日 实验报告日期:2015年3月8日 一.实验环境(网络平台,操作系统,网络拓扑图) 运 ...
- python的变量和简单的数据类型
决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...
- [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)
一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...
- nodejs与websocket模拟简单的聊天室
nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...
- java 模拟简单搜索
Java 模拟简单搜索 实体类 package org.dennisit.entity; /** * * * @version : 1.0 * * @author : 苏若年 <a href=& ...
- Tomcat_记一次tomcatwar包应用简单部署过程
记一次tomcat war包应用简单部署过程 by:授客 QQ:1033553122 1. 实践环境 Linux apache-tomcat-7.0.73 2. 实践步骤 # 解压tomcat压缩 ...
- Python入门学习:1.变量和简单的数据类型
python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用 变量,顾名思义是一个可变的量, ...
随机推荐
- python并发编程——多线程
编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程 1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...
- Python 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
- ASP.NET Core 3.1使用 AutoMapper
多层架构中存在多种模型,如视图模型ViewModel,数据传输对你DTO,ORM对象等,这些数据在层与层之间进行传输必须涉及类型之间的转换. AutoMapper是一个对象-对象映射器,作用是通过设置 ...
- [UWP] - 修改应用程序在任务栏上的显示Logo
用VS2015在windows 10上开发一个UWP的应用,由于windows 10对store应用进行了窗口化,因此可以看到在任务栏上看到应用程序的图标,但是看起来会感觉应用Logo会被嵌在另一个容 ...
- Excel 单元格快速填充技巧
1.普通的复制填充空白单元格 直接左键选中单元格右下边框向下拉,选择填充格式(复制填充) 2.普通的顺序填充空白单元格 直接左键选中单元格右下边框向下拉,选择填充格式(序列填充) 3.其他方式填充空白 ...
- 手把手教你搭饥荒专用服务器(三)—MOD及其他高级设置
友情链接: 手把手教你搭饥荒专用服务器(一)-服务器准备工作 手把手教你搭饥荒专用服务器(二)-环境配置及基本使用 手把手教你搭饥荒专用服务器(三)-MOD及其他高级设置 手把手教你搭饥荒专用服务器( ...
- matplotlib学习日记(二)----图表组成练习
''' 将前面的知识进行练习 plot,scatter,legend等 ''' import matplotlib.pyplot as plt import numpy as np from matp ...
- (数据科学学习手札101)funcy:Python中的函数式编程百宝箱
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用Python完成日常任务时,经常会遇到 ...
- docker 使用笔记
docker 使用笔记 1. 与宿主机之间拷贝文件 docker cp test.html 99f952ac05e6cd879f14aa6c9d0db02aaf498634edc4f6cdc9953c ...
- [LeetCode]Minimum Moves to Equal Array Elements1,2
1.将每次n-1个数+1,转化为每次最大的数-1 public int minMoves(int[] nums) { /* 看了看答案 ,很巧妙,最后的结果肯定是把数组元素都加到一个相同的值, 也就是 ...