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 变量的命名和使用 变量,顾名思义是一个可变的量, ...
随机推荐
- Linux系列之Centos安装
http://mirrors.aliyun.com/centos/6/isos/x86_64/可下载iso文件 第一步 笔记本进入BIOS开启虚拟化 第二步 进入vmware官网下载vm,作者用的是v ...
- Python机器学习课程:线性回归算法
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 最基本的机器学习算法必须是具有单个变量的线性回归算法.如今,可用的高级机器学习算法,库和技术如此之多 ...
- 纯Python绘制艺术感满满的山脊地图,创意满分
1 简介 下面的这幅图是英国摇滚乐队 Joy Division 在1979年发行的其第一张录音室专辑 Unknown Pleasures 的封面,由艺术家 Peter Saville 基于射电脉冲星信 ...
- 使用SimpleDateFormat验证日期格式
Java中日期格式的验证有很多方式,这里介绍用 java.text.SimpleDateFormat 来实现时间验证的一种简单方式.首先我们要知道 SimpleDateFormat 对象有一个方法 v ...
- MySQL在Windows下压缩包方式安装与卸载
一.MySQL的卸载: 1.停止MySQL服务 2.移除MySQL 二.安装: 1.官网下载压缩版 https://downloads.mysql.com/archives/community/ 2. ...
- [AspNetCore3.1] 使用Serilog记录日志
用到的单词 Sink 接收器模块.输出方式.接收模块库.输出模块库 Diagnostic 诊断 Enricher 扩展器 embedded 嵌入式的 compact 紧凑的.简洁的 concept 概 ...
- 管理Windows上的路由表
路由器获取目录帮助手册: route /? 修改路由的时候最高以管理员运行cmd程序 默认路由只是临时生效的,只要管理员禁用在启用网卡,默认路由就消失了(重启计算机默认路由也会消失),可以在后面添加一 ...
- C#中烦人的Null值判断竟然这样就被消灭了
作者:依乐祝 首发自:DotNetCore实战 公众号 https://www.cnblogs.com/yilezhu/p/14177595.html Null值检查应该算是开发中最常见且烦人的工作了 ...
- jmeter+jdk环境配置
一:JDK 安装配置:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ,下载JDK8 安装 1. ...
- maven中pom的结构介绍
1.自己的坐标 groupId-->artifactId-->version> ` 2.打包方式 jar war pom packaging-->jar/war/pom 3. ...