deep learning

谷歌在线notebook

一、基本数据类型与用法

1.torch.tensor(张量)

按照维度不同(中括号的对数),可以用torch.tensor创建scalar(标量)、vector(向量)、matrix(矩阵),

一般的,一维是标量,二维是向量,三维是矩阵,n维是张量(包含1~3维)

# code:

scalar = torch.tensor(7)

vector = torch.tensor([3, 4])

matrix = torch.tensor([[1, 2],

             [3, 4]])

print(scalar.ndim)

print(vector.ndim)

print(matrix.ndim)

print(scalar.shape)

print(vector.shape)

print(matrix.shape)

# out:

0

1

2

torch.Size([])

torch.Size([2])

torch.Size([2, 2])

2.random_tensor(随机张量)

随机张量在深度学习中经常使用,在为每个神经网络进行初始化赋值时,就是用随机张量矩阵为每个节点赋予一个初始值,用法为torch.rand,参数为张量矩阵形状,生成结果为一个随机数组成的张量矩阵。

# code:

random_tensor = torch.rand(3,4)

random_tensor

# out:

tensor([[0.3376, 0.6243, 0.1119, 0.2120],
        [0.5750, 0.4984, 0.5371, 0.4670],
        [0.0507, 0.3727, 0.0362, 0.0290]])

 3.torch.ones和torch.zeros

这两个方法分别用来创建内容全为1或全为0的张量矩阵,用法同rand类似。

# code:

zeros = torch.zeros(3,4)

zeros

# out:

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

# code:

zeros = torch.ones(3,4)

zeros

# out:

tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])

4.常用tensor属性

shape表示矩阵形状,ndim表示张量维度(中括号对数),dtype表示张量数据类型(默认为float32),其中shape属性获取结果与zeros.size()方法获取结果相同。

# code: 

zeros = torch.ones(3,4)

print(zeros.shape)

print(zeros.ndim)

print(zeros.dtype)

# out:

torch.Size([3, 4])

2

torch.float32

dtype可以在创建张量时指定,如tensor=torch.tensor([1,2,3],dtype=float16),它们指定了计算的精度;dtype常用类型包括float32(单精度)、float16(半精度)、float64(双精度)。 若要更改dtype,可以调用to()方法进行修改

device属性在创建张量时默认为cpu,若要采用gpu加速,将其设置为cuda。

tensor = torch.tensor([1,2,3], dtype=float64, device='cuda')

tensor.to(torch.float16)

5.torch.arange

创建一个从指定位置出发,到指定范围结束的张量,可以设置间隔。

# code:

rangeTensor = torch.arange(1, 20, 4)

rangeTensor

# out:

tensor([ 1,  5,  9, 13, 17])

6.torch.zeros_like与torch.ones_like

创建与指定张量相同形状的张量,内容分别为0和1,结果的dtype为int64

# code:

rangeTensor = torch.tensor([[1,2,3],

                                             [4,5,6]])

tensorLike = torch.ones_like(rangeTensor)

tensorLike

# out:

tensor([[1, 1, 1],
        [1, 1, 1]])

# code:

rangeTensor = torch.tensor([[1,2,3],

                                             [4,5,6]])

tensorLike = torch.zeros_like(rangeTensor)

tensorLike

# out:

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

7.张量与常数的运算

张量与常数的运算遵循广播机制,即张量会对所有元素进行相应运算。

运算有两种方式,一种是直接用python运算符,另一种是用torch提供的方法执行,但一般推荐直接使用运算符,因为二者结果相同,运算符操作更为直观。

# code: 

tensor = torch.tensor([4,6,8])

print(tensor+3)

print(tensor*3)

print(torch.add(tensor, 3))

print(torch.mul(tensor, 3))

# out:

tensor([ 7, 9, 11])

tensor([12, 18, 24])

tensor([ 7, 9, 11])

tensor([12, 18, 24])

8.张量与张量的运算

①矩阵元素运算

矩阵的加减乘除需要满足两矩阵形状相同,加减时对应位置元素相加减乘除。

# code:

tensor1 = torch.tensor([4,6,8])

tensor2 = torch.tensor([2,4,7])

tensor1 + tensor2

# out:

tensor([ 6, 10, 15])

②矩阵乘法

矩阵乘法又被称为“点积”,和矩阵元素相乘不同,其运算过程如下图:

 # code:

tensor1 = torch.tensor([[1, 2, 3],

             [4, 5, 6]])

tensor2 = torch.tensor([[1, 4, 7],

             [2, 5, 8],

             [2, 3, 4]])

torch.matmul(tensor1, tensor2)

# out:

tensor([[11, 23, 35],
        [26, 59, 92]])

需要注意的一点是不是任何矩阵都能直接相乘,前提条件是第一个矩阵的列数要等于第二个矩阵的行数,如(2, 3)的矩阵可与(3, 1)的矩阵进行点积运算。

事实上,使用tensor运算就是因为矩阵相乘在计算机上的运算效率要高于循环运算数千倍,正因如此,也造就了当今各大框架都以tensor为基本运算单元的现状。 以下是一段速度对比代码:

# code:

import torch

import time

import numpy as np

# 定义矩阵大小

matrix_size = 100

# 生成两个随机矩阵

tensor1 = torch.rand(matrix_size, matrix_size)

tensor2 = torch.rand(matrix_size, matrix_size)

# 使用张量的点积运算

start_time = time.time()

result_tensor = torch.matmul(tensor1, tensor2)

end_time = time.time()

tensor_time = end_time - start_time

# 使用传统的循环运算计算点积

start_time = time.time()

result_loop = torch.zeros((matrix_size, matrix_size))

for i in range(matrix_size):

    for j in range(matrix_size):

        result_loop[i, j] = sum(tensor1[i, :] * tensor2[:, j])

end_time = time.time()

loop_time = end_time - start_time

# 输出执行时间

print("张量点积运算时间:", tensor_time)

print("传统循环运算时间:", loop_time)

# out:

张量点积运算时间: 0.0005884170532226562

传统循环运算时间: 5.478101968765259

剩余部分正在学习中......

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

银河麒麟V10 SP1服务器客户端定时数据同步

银河麒麟V10 SP1服务器客户端定时数据同步 0.概述 当前只测试了将数据从客户端往服务端推送,两个客户端分别推送不同的数据 1.环境 三台电脑均为银河麒麟V10SP1桌面操作系统 服务器IP:192.168.1.51 用户名:wlh 客户端IP:192…

LabVIEW和MES系统的智能化车间数据对接

LabVIEW和MES系统的智能化车间数据对接 随着工业4.0时代的到来,智能制造成为推动制造业高质量发展的重要手段。其中,数字化车间作为智能制造的重要组成部分,其设计与实现至关重要。在数字化车间环境下,如何利用LabVIEW软件与MES系…

解析SoC芯片:构建智能设备的核心技术

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

linux磁盘原理

在linux系统中,对磁盘进行管理与windows系统类似,都要先分区,格式化,创建文件系统,挂载目录,数据写入

【PHP开发工程师详细讲解分析】——网站注册账号(头像的上传操作),让自己喜欢的头像更换畅通无阻

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

便携式应急指挥箱规格参数

概况: 微缩型的无线视频音频传输的机动挥所。体积小、重量轻、公配电方便、携带便携、功能齐全。可进行单兵作战,通过此无线音频视频传输的指挥箱能完成现场图像、语音、数据的采集等功能,可以通过5G/4G/WIFI等多种无线网络完成传输的需求,或…

计算机网络相关知识总结

一、概述 计算机网络可以极大扩展计算机系统的功能机器应用范围,提高可靠性,在为用户提供放方便的同时,减少了整体系统费用,提高性价比。 计算机网络的功能主要有:1. 数据共享;2. 资源共享;3. 管…

echart坑

echart坑 原因: 引用了echarts里面的init方法显示没有定义 解决的方法 将import echarts from echarts 的引入方式改为: import * as echarts from echarts

【vue2】实现微信截图(复制图片)在项目内可粘贴

需求 后台管理在上传图片地方需要将复制的图片粘贴上传 一、添加事件 在原有上传组件的基础上添加 paste事件 二、方法 onPaste(e) {const items (e.clipboardData || window.clipboardData).items;let blob null;for (let i 0; i < items.length; i) {if (items[i].ty…

学习Rust的第10天:枚举和模式匹配

今天我们来看看一个类似的概念 enums 。 Enums: We saw that in Rust, enums are data types that list possible values, giving a simple and type-safe mechanism to describe alternatives. We looked at how to create enums and use them to represent similar possibili…

Dropout Feature Ranking for Deep Learning Models

摘要 深度神经网络( deep neural networks&#xff0c;DNNs )在多个领域取得了最新的研究成果。不幸的是&#xff0c;DNNs因其不可解释性而臭名昭著&#xff0c;从而限制了其在生物和医疗保健等假说驱动领域的适用性。此外&#xff0c;在资源受限的环境下&#xff0c;设计依赖…

沐风老师3dMax万有引力插件ToGround使用方法详解

3dMax万有引力插件ToGround使用教程 3dMax万有引力插件ToGround&#xff0c;用于在复杂地形&#xff08;曲面&#xff09;上将对象放置在适当高度的实用工具。例如&#xff1a;将大量的人、植物和汽车快速放置在一个街道、公园和小跑道高度不同的区域尤其有用。 【适用版本】 …

android openGL ES详解

1、渲染线程与主线程的通信 两个线程之间的通信可以用如下方法: 在主线程中的 GLSurfaceView 实例可以调用 queueEvent( &#xff09;方法传递一个 Runnable 给后台渲染线程&#xff0c;渲染线程可以调用 Activity 的 runOnUIThread()来传递事件 (event) 给主线程。 2、顶点…

SQLite FTS3 和 FTS4 扩展(三十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 的命令行 Shell(三十一&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 概述 FTS3 和 FTS4 是 SQLite 虚拟表模块&#xff0c;允许用户执行 对一组文档进行全文搜索。最常见&#xff08;和最有效…

Linux之yum和vim的使用

一、yum的使用 yum 后面跟install要安装的文件名&#xff1a; 若你要安装的文件已经存在&#xff0c;则会出现&#xff1a; 要删除文件&#xff1a; yum remore文件名即可删除 在我们安装完lrzsz之后&#xff0c;可以用rz指令和sz指令&#xff1a; rz指令可以从window窗口中…

开源模型应用落地-chatglm3-6b-集成langchain(十)

一、前言 langchain框架调用本地模型&#xff0c;使得用户可以直接提出问题或发送指令&#xff0c;而无需担心具体的步骤或流程。通过LangChain和chatglm3-6b模型的整合&#xff0c;可以更好地处理对话&#xff0c;提供更智能、更准确的响应&#xff0c;从而提高对话系统的性能…

LoggerFactory is not a Logback

错误信息 LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.SimpleLoggerFactory loaded from file:/D:/maven/repository/org/slf4j/slf4j-simple/1.7.26/slf…

easyx库的学习(鼠标信息)

前言 本次博客是作为介绍easyx库的使用&#xff0c;最好是直接代码打到底&#xff0c;然后看效果即可 代码 int main() {initgraph(640, 480, EX_SHOWCONSOLE|EX_DBLCLKS);setbkcolor(RGB(231, 114, 227));cleardevice();//定义消息结构体ExMessage msg { 0 };//获取消息wh…

SpringBoot+Vue开发记录(三)

说明&#xff1a;本篇文章的主要内容为需求分析。需求分析这一部分很重要&#xff0c;也稍微有点子难搞&#xff0c;所以本篇文章里的有些内容会有失偏颇。 一、准备步骤 我打算做一个刷题项目&#xff0c;但是具体这个项目该怎么做&#xff0c;我是一头雾水。 所以就要先进行…

OPTEE的FTRACE跟踪技术实战

【按语】:对于排除性能问题或优化代码来说,有没有更好的工具可以使用?FTRACE记录了对函数的所有调用,并包含计时信息。因此,对于排除性能问题或优化代码来说,它是一个很有价值的工具。本博客描述如何使用FTRACE为TA生成函数调用图。相关知识点介绍,请参考OPTEE Ftrace函…
最新文章