Pytorch常用操作

创建tensor

x = torch.empty(*sizes)  #创建一个未初始化的tensor(后面用torch.nn.init中的一些函数进行初始化)

>>> torch.empty(2, 3) tensor(1.00000e-08 *  [[ 6.3984, 0.0000, 0.0000],  [ 0.0000, 0.0000, 0.0000]])

x = torch.rand(5, 3)  #返回一个范围为[0,1)、size为5*3的矩阵

tensor([[0.3380, 0.3845, 0.3217],[0.8337, 0.9050, 0.2650],[0.2979, 0.7141, 0.9069],[0.1449, 0.1132, 0.1375],[0.4675, 0.3947, 0.1426]])

x = torch.zeros(5, 3, dtype=torch.long)

tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])

x = torch.ones(5, 3, dtype=torch.double)

tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)

x = torch.tensor([5.5, 3])  #Construct a tensor directly from data

tensor([5.5000, 3.0000])

tensor运算

torch.mm(tensor1, tensor2, out=None)  #tensor的矩阵乘法matrix multiplication 

torch.mul(tensor1, tensor2, out=None)  #tensor的点乘Hadamard product

tensor相关操作

x.size()  #取tensor的size,返回的是tuple

z = x.view(-1, 8)  #和reshape功能一样,只是参数少了一层括号

x = x.clamp(min, max)  #取最大最小值,和numpy.clip(a, a_min, a_max, out=None)类似

torch.max()

  torch.max(Tensor)  #对所有元素,取最大值,返回只有一个数的tensor

  torch.max(input, dim, keepdim=False, out=None)  #对dim维度上的元素取最大值,返回两个tensor,第一个是dim上的最大值,第二个是最大值所在的位置(argmax)

torch.cat(seq, dim=0, out=None)  #concatenate,功能和numpy.concatenate((a1, a2, ...), axis=0, out=None)一样,格式也恰好一样

  一个技巧:inputs = torch.cat(inputs).view(len(inputs), 1, -1)  #先cat再view(reshape)

torch.stack( (a,b,c) ,dim = 2)  #建立一个新的维度,然后再在该纬度上进行拼接

  torch.stack VS torch.cat:cat是在已有的维度上拼接,而stack是建立一个新的维度,然后再在该纬度上进行拼接。

  用其实现 x.append(in_tensor) 的功能:先构造已经append好的x(此时x为list),然后x = torch.stack(x, dim = 0)

  可参考 https://blog.csdn.net/Teeyohuang/article/details/80362756

torch.unsqueeze(input, dim, out=None)  #给input(一个tensor)在dim维度上增加一个维度

>>> x = torch.tensor([1, 2, 3, 4]) >>> torch.unsqueeze(x, 0) tensor([[ 1, 2, 3, 4]]) >>> torch.unsqueeze(x, 1) tensor([[ 1],  [ 2],  [ 3],  [ 4]])

b = a.numpy()  #torch tensor转numpy array

b = torch.from_numpy(a)  #numpy array转torch tensor(两种转都是没有复制,而是直接引用的)

tensor_a , idx_sort = torch.sort(tensor_a, dim=0, descending=True)  #tensor排序,返回排序后的tensor和下标

tensor求导

x = torch.ones(2, 2, requires_grad=True)  #创建时设置requires_grad为True,将x看成待优化的参数(权重)

model.zero_grad()  #将每个权重的梯度清零(因为梯度会累加)

optimizer.zero_grad()  #当optimizer=optim.Optimizer(model.parameters())时,其与model.zero_grad()等效

loss.backward()  #求导,即对loss进行back propagation

optimizer.step()  #在back propagation后更新参数

定义神经网络:

1. 定义网络架构(模型的forward,通常用一个继承自torch.nn.Module的类)

  __init__():将nn实例化(每一个nn都是一个类),参数自己定义

  forward(self, x):模型的forward,参数x为模型输入

  self.add_module("conv", nn.Conv2d(10, 20, 4))  # self.conv = nn.Conv2d(10, 20, 4) 和这个增加module的方式等价

  torch.nn.Embedding(num_embeddings, embedding_dim, ...)  #是一个矩阵类,里面初始化了一个随机矩阵,矩阵的长是字典的大小,宽是用来表示字典中每个元素的属性向量,向量的维度根据你想要表示的元素的复杂度而定。类实例化之后可以根据字典中元素的下标来查找元素对应的向量。 

2. 定义输入输出

3. 定义loss(如果用nn需要实例化才定义,否则用functional直接在训练中用)

4. 定义优化器

训练:

1. 初始化,如model.zero_grad()将一些参数初始化为0

2. 准备好输入

3. 将模型设置为train模式

4. 将模型forward

5. 计算loss和accuracy

6. back propagation并计算权重的梯度

7. 做validation

8. 打印Epoch、loss、acc、time等信息

(不一定所有步骤都有,可以看情况省略部分)

验证或测试:

1. 准备好输入

2. 将模型设置为eval模式

3. 将模型forward

4. 计算loss和accuracy

5. 打印loss、acc等信息

(train和test相比,主要多了bp相关的,包括zero_grad()和backward()等)

 

torch.max(inputdimkeepdim=Falseout=None) 

转载于:https://www.cnblogs.com/sbj123456789/p/9483760.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据聚合Spring Data MongoDB:嵌套结果

1引言 在上一篇文章中,我们构建了聚合管道的基本示例。 如果您需要有关如何创建项目和配置应用程序的更多详细信息,也许您想看看使用Spring Data MongoDB和Spring Boot进行数据聚合 。 在本文中,我们将重点研究一个用例,在这种情况…

如何消除img默认的间距

方案一:div{font-size:0};方案二:img{ display:block};方案三:img{vertical-align:top;}方案四:div{ margin-bottom:-3px }; 为什么会有间距呢? 根本原因在于img标签为inline元素,该元素默认垂直对齐方式为以父元素的baseline,但是…

scanf中的%[^\n]%*c格式

scanf 语法: #include <stdio.h> int scanf( const char *format, ... ); 类似函数有 int scanf(const char *format, ...); int fscanf(FILE *stream, const char *format, ...);//指定输入流 int sscanf(const char *str, const char *for…

java有理数类的封装_java实验报告有理数的类封装.doc

java实验报告有理数的类封装华中科技大学文华学院《Java程序设计》实验报告实验三&#xff1a;有理数的类封装专业班级&#xff1a; 通信工程2008级1班姓名&#xff1a;学号&#xff1a;时间&#xff1a;实验三&#xff1a;有理数的类封装1、实验目的&#xff1a;让学生学习使用…

vim基本设置

vim基本配置&#xff1a;包括tab键替换成4个空格 Edit Vim configuration file ".vimrc" in your HOME directory, add below lines: [plain] view plaincopy set et set ci set sw4 set ts4 After new setting take effect, each time you press TAB key, …

在JPA和JDBC中使用存储过程。 嗯,只要使用jOOQ

Java杂志的当前版本由Josh Juneau撰写了有关JDBC和JPA的大数据最佳实践的文章&#xff1a; http : //www.javamagazine.mozaicreader.com/MayJune2016 本文介绍了如何在JDBC中使用存储过程&#xff08;不幸的是&#xff0c;请注意如何关闭资源。即使在Java Magazine的文章中&a…

java hash sha256_Sha256加密

package com.zq.utils.encryption;import java.util.Random;import org.apache.shiro.crypto.hash.Sha256Hash;import com.zq.utils.string.StringUtils;/**** Created by MyEclipse. Author: ChenBin E-mail: chenb8000056.com Date:* 2016-5-23 Time: 下午3:10:37 Company: H…

怎样花两年时间去面试一个人

Joel Spolsky曾经感叹&#xff1a;招聘难&#xff0c;难于上青天&#xff08;此处笔者稍加演绎:)&#xff09;。他有两个辛辣但不乏洞察力的断言&#xff1a;真正的牛人也许一辈子就投大概4次简历&#xff0c;这些家伙一毕业就被好公司抢走了&#xff0c;并且他们的雇主会给他们…

非网络引用element-ui css导致图标无法正常显示的解决办法

https://blog.csdn.net/m0_37893932/article/details/79460652 ******************************************** 前言 官方推荐的css及js引用方式如下: <!-- 引入样式 --> <link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-chalk/in…

Java EE与Java SE:Oracle是否放弃了企业软件?

Java Enterprise Edition是全球Java社区中最大的困惑来源之一。 就像《星球大战》和《星际迷航 》之间的区别一样&#xff0c;对于“原力觉醒”是他们在这部电影中看过的第一部电影的人来说。 奇怪的是&#xff0c;即使您有使用EE进行开发的经验&#xff0c;但整个情况通常仍然…

约瑟夫环

约瑟夫环是一个数学的应用问题&#xff1a;已知n个人&#xff08;以编号1&#xff0c;2&#xff0c;3...n分别表示&#xff09;围坐在一张圆桌周围。从编号为k的人开始报数&#xff0c;数到m的那个人出列&#xff1b;他的下一个人又从1开始报数&#xff0c;数到m的那个人又出列…

java链表的数据结构_Java数据结构 获取链表(LinkedList)的第一个和最后一个元素

Java数据结构 获取链表(LinkedList)的第一个和最后一个元素以下实例演示了如何使用 LinkedList 类的 linkedlistname.getFirst() 和 linkedlistname.getLast() 来获取链表的第一个和最后一个元素&#xff1a;Main.java 文件import java.util.LinkedList;public class Main {pub…

第二章:表单和模板

在第一章中&#xff0c;我们学习了使用Tornado创建一个Web应用的基础知识。包括处理函数、HTTP方法以及Tornado框架的总体结构。在这章中&#xff0c;我们将学习一些你在创建Web应用时经常会用到的更强大的功能。 和大多数Web框架一样&#xff0c;Tornado的一个重要目标就是帮助…

C语言main()函数详解

C的设计原则是把函数作为程序的构成模块。main()函数称之为主函数&#xff0c;一个C程序总是从main()函数开始执行的。一、main()函数的形式 在最新的 C99 标准中&#xff0c;只有以下两种定义方式是正确的&#xff1a;int main( void ) /* 无参数形式 */{...return 0;}int ma…

json套json_JSON –拯救杰克逊

json套json有时&#xff0c;您必须使用JavaScript从服务器中获取一些数据&#xff0c; JSON是完成此任务的不错选择。 让我们玩一下JPA揭秘&#xff08;第1集&#xff09;-OneToMany和ManyToOne映射中的Employer – Employee – Benefit示例。 我们将在基于Spring Framework的…

[洛谷P1951]收费站_NOI导刊2009提高(2)

题目大意&#xff1a;有一张$n$个点$m$条边的图&#xff0c;每个点有一个权值$w_i$&#xff0c;有边权&#xff0c;询问从$S$到$T$的路径中&#xff0c;边权和小于$s$&#xff0c;且$\max\limits_{路径经过k}\{w_i\}$最小&#xff0c;输出这个最小值&#xff0c;若到达不了&…

yii mysql 主从_mysql主从同步实践 YII

1、两台服务器互联master、slave 2、master配置&#xff1a; server-id 1 master端ID号 log-bin/data/logbin/mysql-bin 日志路径及文件名 #binlog-do-db cacti 同步cacti&#xff0c;此处关闭的话&#xff0c;就是除不允许的&#xff0c;其它的库均同步。 binlog-ignore-db …

性能与可靠性:Java应用为何像F1汽车

再想一想。 性能和可靠性相关吗&#xff1f; 还是这些东西相互排斥&#xff1f; 我认为是后者。 如今&#xff0c;现实是IT部门将应用程序的性能和可靠性视为同一事物&#xff0c;但这离事实还差得远。 让我们看看一级方程式车队如何管理性能和可靠性。 上赛季迈凯轮本田车队…

BZOJ[1051]受欢迎的牛

Description 每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛&#xff0c;给你M对整数(A,B)&#xff0c;表示牛A认为牛B受欢迎。 这种关系是具有传递性的&#xff0c;如果A认为B受欢迎&#xff0c;B认为C受欢迎&#xff0c;那么牛A也认为牛C受欢迎。你的任务是求出有多少…

C语言文件操作函数大全

clearerr&#xff08;清除文件流的错误旗标&#xff09; 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr&#xff08;&#xff09;清除参数stream指定的文件流所使用的错误旗标。 返回值   fclose&#xff…