常见的学习种类

线性回归,最简单的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. 数据类型&字符串得索引及切片

    一:数据类型 1):int     1,2,3用于计算 2):bool    ture  false  用于判断,也可做为if的条件 3):str     用引号引起来的都是str 存储少量数据,进行 ...

  2. pandas之DataFrame创建、索引、切片等基础操作

    知识点 Series只有行索引,而DataFrame对象既有行索引,也有列索引 行索引,表明不同行,横向索引,叫index,0轴,axis=0 列索引,表明不同列,纵向索引,叫columns,1轴,a ...

  3. NS2仿真:使用NS仿真软件模拟简单网络模型

    NS2仿真实验报告1 实验名称:使用NS仿真软件模拟简单网络模型 实验日期:2015年3月2日~2015年3月7日 实验报告日期:2015年3月8日 一.实验环境(网络平台,操作系统,网络拓扑图) 运 ...

  4. python的变量和简单的数据类型

    决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...

  5. [深度学习] pytorch学习笔记(1)(数据类型、基础使用、自动求导、矩阵操作、维度变换、广播、拼接拆分、基本运算、范数、argmax、矩阵比较、where、gather)

    一.Pytorch安装 安装cuda和cudnn,例如cuda10,cudnn7.5 官网下载torch:https://pytorch.org/ 选择下载相应版本的torch 和torchvisio ...

  6. nodejs与websocket模拟简单的聊天室

    nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...

  7. java 模拟简单搜索

    Java 模拟简单搜索 实体类 package org.dennisit.entity; /** * * * @version : 1.0 * * @author : 苏若年 <a href=& ...

  8. Tomcat_记一次tomcatwar包应用简单部署过程

    记一次tomcat war包应用简单部署过程 by:授客 QQ:1033553122 1.  实践环境 Linux apache-tomcat-7.0.73 2.  实践步骤 # 解压tomcat压缩 ...

  9. Python入门学习:1.变量和简单的数据类型

    python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用   变量,顾名思义是一个可变的量, ...

随机推荐

  1. 逆袭故事|从“点点点”到月薪17K,这个女孩子做到啦

    姓:XXX,XX VIP 学员,一名自动化测试工程师!之前在某大型培训机构转行学习软件测试时就是木子老师的学生,她也一直关注木子老师的动态,后来知道木子老师打算开设测试开发高级提升班,等开了班就报名了 ...

  2. Core3.0读取appsetting.json中的配置参数

    前言 方法很多,下面的例子也是从百度上搜索到的,原文链接已经找不到了. 方法1 1.添加NovelSetting节点,写入相关的配置信息 2.创建类,字段与上面的配置一致 3.StartUp.cs中获 ...

  3. CentOS7下常用安装服务软件yum方式的介绍

    简介:介绍yum软件包的管理并配置本地yum源 yum安装:基于 C/S 架构,yum安装称之为傻瓜式安装 yum安装优点:方便快捷,不用考虑包依赖,自动下载软件包. yum安装缺点:人为无法干预,无 ...

  4. MPEG2TS文件格式概述

    总结TS文件格式,早在几个月前就有了这个想法,但一直拖到今天才真正准备写一篇博文来介绍. 再不介绍的话,估计几月后又要去故纸堆里翻东西了,毕竟个人笔记中总结记录的东西太多,搞不好哪天给意外弄丢了. 1 ...

  5. AES 逻辑

    分组长度 加密逻辑 轮函数 参考:链接 字节代换 两种方法: 1.首先(将字节看做GF(28)上的元素,映射到自己的乘法逆元)换成人话就是(对多项式的逆,参考:链接):   其次,对字节做仿射变换 2 ...

  6. Python获取网页html代码

    获取网页html代码: import requests res = requests.get('https://www.cnblogs.com/easyidea/p/10214559.html') r ...

  7. python实现贴吧顶贴机器人

    前言------百度贴吧流量如何?全球最大的中文社区,虽然比不上阿里,腾讯! 此文章仅供交流学习.建议机器人用小号操作,切勿用作商业用途! 测试版本:python 3.7 64位火狐浏览器firefo ...

  8. Spring项目出现--Error:java: Compilation failed: internal java compiler error

    错误现象 使用Idea导入新项目或升级idea或新建项目时会出现以下异常信息: Error:java: Compilation failed: internal java compiler error ...

  9. 学习笔记之Python人机交互小项目二:名片管理系统

    继上次利用列表相关知识做了简单的人机交互的小项目名字管理系统后,当学习到字典时,老师又让我们结合列表和字典的知识,结合一起做一个名片管理系统,这里分享给在学习Python的伙伴! 1.不使用函数 1 ...

  10. Hbase学习Hbase基础介绍

    一.产生背景 自1970年以来,关系数据库用于数据存储和维护有关问题的解决方案.大数据的出现后,好多公司实现处理大数据并从中受益,并开始选择像Hadoop的解决方案.Hadoop使用分布式文件系统,用 ...