pytorch——合并分割
分割与合并
import torch
import numpy as np
#假设a是班级1-4的数据,每个班级里有32个学生,每个学生有8门分数
#假设b是班级5-9的数据,每个班级里有32个学生,每个学生有8门分数
#现在要将两个班级合并
a=torch.rand(4,32,8)
b=torch.rand(5,32,8)
c=torch.cat([a,b],dim=0) #在0维度上进行a和b的拼接.注意只有在拼接的维度上数字可以不一致
print(c.shape) #使用stack拼接
c1=torch.rand(3,8)
d1=torch.rand(3,8)
cd=torch.stack([c1,d1],dim=0)
print('使用stack拼接',cd.shape) #在0维度进行拼接,会在前面插入多一个2的维度,
# 如果新生维度取0就是取上半部分,如果取1就是取下半部分
print('这里是c1',c1)
print('这里是d1',d1)
print('取上半部分',cd[0,0:,0:])
print('取上半部分',cd[1,0:,0:]) #拆分操作
#现在想吧(3,32,8)拆分成三个(1,32,8)
t1=torch.rand(3,32,8)
ts1,ts2,ts3=t1.split(1,dim=0) #将维度0拆分成每个都是1的
print(ts1.shape,ts2.shape,ts3.shape)
#现在想吧(3,32,8)拆分成两个(2,32,8)和(1,32,8)
ts1,ts2=t1.split([2,1],dim=0) #将维度0拆分成第一组两个,第二组1个
print(ts1.shape,ts2.shape)
#使用chunk按块的数量拆分
t1=torch.rand(6,32,8)
ts1,ts2,ts3=t1.chunk(3,dim=0) #将维度0拆分成3块
print(ts1.shape,ts2.shape,ts3.shape)
数学运算
#数学运算
a=torch.rand(3,4)
b=torch.rand(4)
print(a+b) #能执行成功是因为b会用自动拓展使得变成(1,4),然后变成(3,4)来和a运算
#print(a*b)
#print(a/b)
#print(a-b) #矩阵相乘torch.matmul
a=torch.ones(3,3)
b=torch.tensor([[2,2,2],[2,2,2],[2,2,2]]).type(torch.float32)
print(torch.matmul(a,b)) #四维情况下的matmul,此时前两维度不变,取后两维做成矩阵然后进行乘积
a=torch.rand(4,3,28,64)
b=torch.rand(4,3,64,32)
print(torch.matmul(a,b).shape) #有关于取值
qq=torch.tensor(3.14)
print('向下取',qq.floor(),'向上取',qq.ceil(),'取整数部分',qq.trunc(),'取小数部分',qq.frac())
print('四舍五入取整',qq.round()) #筛选
grad=torch.rand(2,3)*15
print(grad.max())
print(grad.median())
print(grad)
print(grad.clamp(9)) #小于9的变成9
print(grad.clamp(6,9)) #大于9的变成9,小于6的变成6 #求范数
f=torch.tensor([[2,2,2,2],[2,2,2,2]]).type(torch.float32)
print(f.norm(1),f.norm(2)) #可以加上dim指定某个维度求范数 #mean和prod和max和min 括号里面如果不加维度的参数会默认将所有维度打平成一个向量来求
m=torch.tensor([[0,1,2,3],[4,5,6,7]]).type(torch.float32)
print(m.shape)
#mean等于的是求和起来再除以size
print(m.mean())
#prod是乘积
print(m.prod())
#上面是打平来求的,下面来看不打平的
print('不打平的求后面这两个列的乘积',m.prod(1))
print('返回列的最大值的索引',m.argmax(1))
高级操作
#keepdim用于求max或者argmax的时候,维度不改变,其他位置自动添加1
#topk,按顺序取几个大的
cd=torch.rand(2,3)
print('初始的tensor',cd)
print('取1维(针对前面的那一维也就是行)上最大的两个',cd.topk(2,dim=1))
#topk,按顺序取几个小的
cd=torch.rand(2,3)
print('初始的tensor',cd)
print('取1维(针对前面的那一维也就是行)上最小的两个',cd.topk(2,dim=1,largest=False))
#取第n个小的
cd=torch.rand(2,8)
print('初始的tensor',cd)
print('取1维(针对前面的那一维也就是行)上最小的第五个(第五小)',cd.kthvalue(5,dim=1)) # where把用其他两个tensort通过特定的条件生成一个tensor
cond=torch.tensor([[0.679,0.7271],[0.8884,0.4163]])
a=torch.tensor([[0.,0.],[0.,0.]])
b=torch.tensor([[1.,1.],[1.,1.]])
print(torch.where(cond>0.5,a,b))
神经元——激活函数
有x0到xi的多个输入,然后经过多个输入的ax+b的加权平均得到一个值,如果这个值大于阈值就可以做出反应,
而且这个反应的输出点平是定的,如果这个值不达到阈值就不会作出反应
为了弄可以求导的连续的提出了一种激活函数sigmoid(区间从0到1)
激活函数的导数
#调用sigmore函数
sig=torch.linspace(-100,100,10)
print(torch.sigmoid(sig))
另外一种的激活函数tanh(区间从-1到1)
tanh激活函数求得的导数的值
#调用tanh函数
tanh=torch.linspace(-3,3,5)
print(torch.tanh(tanh))
relu整形的线性单元
#调用relu函数
relu=torch.linspace(-3,3,5)
print(torch.relu(relu))
loss损失种类及其求导后的公式
1.均方差
均方差里面有两种,一种是loss还有一种是norm,norm相当于是对loss的开平方
import torch
x = torch.tensor([1]).type(torch.float32) #x的值是单个数字1
x.requires_grad_() #设置x是需要进行求导的
y = x*2 #公式
grads = torch.autograd.grad(outputs=y, inputs=x)[0] #导数是output(y)去对input--x求导,由于y=2*1=2是标量,不是向量
#所以不用设置grad_outputs
print(grads)
pytorch——合并分割的更多相关文章
- js数组常用操作方法小结(增加,删除,合并,分割等)
本文实例总结了js数组常用操作方法.分享给大家供大家参考,具体如下: var arr = [1, 2, 3, 4, 5]; //删除并返回数组中第一个元素 var theFirst = arr.shi ...
- 【daily】文件分割限速下载,及合并分割文件
说明 主要功能: 1) 分割文件, 生成下载任务; 2) 定时任务: 检索需要下载的任务, 利用多线程下载并限制下载速度; 3) 定时任务: 检索可合并的文件, 把n个文件合并为完整的文件. GitH ...
- NumPy学习(索引和切片,合并,分割,copy与deep copy)
NumPy学习(索引和切片,合并,分割,copy与deep copy) 目录 索引和切片 合并 分割 copy与deep copy 索引和切片 通过索引和切片可以访问以及修改数组元素的值 一维数组 程 ...
- Linux大文件split分割以及cat合并
文件大小分割文件时,需要以-C参数指定分割后的文件大小: $ split -C 100M large_file.txt stxt 如上所示,我们将大文件large_file.txt按100M大小进 ...
- Linux中split大文件分割和cat合并文件
当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输.这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件. 1.分割 ...
- WinRAR分割超大文件
在自己的硬盘上有一个比较大的文件,想把它从网上通过E-Mail发送给朋友时,却发现对方的收信服务器不能够支持那么大的文件……,这时即使用ZIP等压缩软件也无济于事,因为该文件本身已经被压缩过了.于是许 ...
- Atitit 数据存储视图的最佳实际best practice attilax总结
Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论 本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...
- FastReport.Net 常用功能总汇
一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...
- python字符串及其方法详解
首先来一段字符串的基本操作 str1="my little pony" str2="friendship is magic" str3=str1+", ...
随机推荐
- angular8 大地老师学习笔记---第六课
export class TodolistComponent implements OnInit { public keyword:string; public todolist:any[]=[]; ...
- Redis集群的分布式部署
3.2.2:Redis Cluster: Redis 分布式部署方案: 1) 客户端分区:由客户端程序决定 key 写分配和写入的 redis node,但是需要客户端自己处理写入 分配.高可用管 ...
- Python -- 修改、添加和删除元素
大多数列表将是动态的,这意味着列表创建后,将随着程序的运行增删元素. 修改列表元素 修改列表元素的语法与访问列表元素的语法类似.要修改列表元素,可指定表名和要修改的元素指引,再指定该元素的新值. #代 ...
- iOS 调用系统拍照遇到的坑
iOS 11之前用的一套图片选择器框架,之前一直没问题,iOS11之后拍照后回调失败......,打断点方法完全执行,也能回调成功:但是去掉断点又恢复不能会调的问题.困扰了一下午,愣是没有解决.后来把 ...
- 生成对抗网络(Generative Adversarial Networks, GAN)
生成对抗网络(Generative Adversarial Networks, GAN)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的学习方法之一. GAN 主要包括了两个部分,即 ...
- HBase内存配置及JVM优化
前言 本文从HBase的内存布局说起,先充分了解HBase的内存区的使用与分配,随后给出了不同业务场景下的读写内存分配规划,并指导如何分析业务的内存使用情况,以及在使用当中写内存Memstore及读内 ...
- 拖拽一个元素如此简单,mouse、drag、touch三兄弟的用处
最近需要做一个投票活动,上传图片时需要拖拽.缩放来裁剪图片,vue的组件不少,不过自己动手才能丰衣足食,一味使用别人的组件实在难以进步,所以自己研究一番. 一.mouse.drag.touch傻傻分不 ...
- java零基础之---常见java面试题
看到别人分享的面试题,感觉蛮全面的,分享出来,慢慢研究答案. 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode() ...
- OpenGL投影矩阵(Projection Matrix)构造方法
(翻译,图片也来自原文) 一.概述 绝大部分计算机的显示器是二维的(a 2D surface).在OpenGL中一个3D场景需要被投影到屏幕上成为一个2D图像(image).这称为投影变换(参见这或这 ...
- JAVA并发包——锁
1.java多线程中,可以使用synchronized关键字来实现线程间的同步互斥工作,其实还有个更优秀的机制来完成这个同步互斥的工作--Lock对象,主要有2种锁:重入锁和读写锁,它们比synchr ...