当前位置: 首页 > news >正文

深度学习基础、pytorch使用①

目录

一、深度学习简介

1、什么是深度学习

2、特点

3、优缺点

优点

缺点

二、PyTorch框架

1、简介

2、与numpy区别

3、特点

三、PyTorch使用(张量)

1、什么是张量

2、张量的创建

①基本创建方式

②创建线性和随机张量

③张量元素类型转换

④张量类型转换

· 张量转换为NumPy数组

· NumPy数组转换为张量

· 标量张量和数字转换

3、张量数值计算

①基本计算

②点乘运算、矩阵乘法

一、深度学习简介

1、什么是深度学习

  • 深度学习是机器学习的一种实现方法
  • 是一种以人工神经网络为架构,对数据进行特征学习的算法。
  • 深度学习中的形容词“深度”是指在网络中使用多层。

        深度学习模仿人类大脑的运行方式, 从经验中学习获取知识(不需要人力提取特征)。 这也是深度学习被看做黑盒子(隐藏层),可解释性差的原因。

2、特点

  • 多层非线性变换
  • 自动特征提取
  • 大数据和计算能力
  • 可解释性差

3、优缺点

优点

        自动提取特征 精度高,性能优于其他机器学习算法,某些领域甚至超越了人类 可以拟合任意非线性关系 框架多,不需我们自己造轮子

缺点

        黑箱,可解释性差 网络结构复杂,参数多,超参数也多 训练时间长,对算力有较高要求 小数据集上表现不佳,容易过拟合

二、PyTorch框架

1、简介

  • 一个 Python 深度学习框架,它将数据封装成张量(Tensor)来进行处理。
  • PyTorch 中的张量就是元素为同一种数据类型。
  • 在PyTorch 中,张量以"类"的形式封装起来,对张量的一些运算、处理的方法被封装在类中。

2、与numpy区别

  • numpy(数组)只能在CPU上计算
  • 张量可以运行在GPU

3、特点

  • 类似于NumPy的张量计算
  • 自动微分系统
  • 动态计算图
  • GPU加速(CUDA支持)
  • 支持多种应用场景

三、PyTorch使用(张量)

1、什么是张量

  • 张量,本质就是一个数组,是以类的形式封装起来。
  • PyTorch张量与NumPy数组类似,但PyTorch的张量具有GPU加速的能力(通过CUDA),这使得深度学习模型能够高效地在GPU上运行。

2、张量的创建

①基本创建方式

  • torch.tensor 根据指定数据创建张量
  • torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量
  • torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量
  • tensor只支持数值创建张量(一般形式)
  • Tensor支持数值、形状创建张量
def dm01_create_tensor():data1 = torch.tensor(3)  # 标量 3# dtype:数据类型,int64=>64位整型# shape:形状print("data ==>", data1, data1.dtype, data1.shape)# data ==> tensor(3) torch.int64 torch.Size([])data2 = torch.tensor([3])  # 一维向量print("data ==>", data2, data2.dtype, data2.shape)# data ==> tensor([3]) torch.int64 torch.Size([1])data3 = torch.tensor([3, 4, 6])print("data ==>", data3, data3.dtype, data3.shape)# data ==> tensor([3, 4, 6]) torch.int64 torch.Size([3])data4 = torch.tensor([[1, 2, 3],[4, 5, 6]])  # 二维矩阵print("data ==>", data4, data4.dtype, data4.shape)# data ==> tensor([[1, 2, 3],#                 [4, 5, 6]]) torch.int64 torch.Size([2, 3])# 通过创建numpy,转换成tensordata = np.random.rand(2, 3)data = torch.tensor(data)print("data ==>", data, data.dtype, data.shape)# data ==> tensor([[0.7165, 0.4843, 0.9099],#         [0.4426, 0.7343, 0.9241]], dtype=torch.float64) torch.float64 torch.Size([2, 3])
def dm02_Tensor():# 根据数据形状来创建张量data1 = torch.Tensor(2, 3)print("data ==>", data1)# data ==> tensor([[-1.7300e+18,  1.9954e-42,  0.0000e+00],#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00]])# 根据数值来创建张量data2 = torch.Tensor([3, 4])print("data ==>", data2)# data ==> tensor([3., 4.])data3 = torch.Tensor([[1, 2, 3], [4, 5, 6]])print("data ==>", data3)# data ==> tensor([[1., 2., 3.],#         [4., 5., 6.]])
def dm03_torch_IntTensor():# 创建指定类型的张量data1 = torch.IntTensor([2.7, 3.5])  # 创建整型张量,直接舍去小数位# data ==> tensor([2, 3], dtype=torch.int32)data2 = torch.FloatTensor(2, 3)  # 创建单精度张量# data ==> tensor([[-1.4043e-09,  2.0613e-42,  0.0000e+00],#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00]], torch.float32)data3 = torch.DoubleTensor(2, 3)  # 创建双精度张量# data ==> tensor([[3.1229e-311,  0.0000e+00,  0.0000e+00],#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00]], dtype=torch.float64)print("data ==>", data1)print("data ==>", data2, data2.dtype)print("data ==>", data3)

②创建线性和随机张量

  • torch.arange 和 torch.linspace 创建线性张量
  • torch.random.init_seed 和 torch.random.manual_seed 随机种子设置
  • torch.randn 创建随机张量
def dm04_line_Tensor():data1 = torch.arange(0, 5, 2)  # 创建一个等差数列print("data ==>", data1)  # tensor([0, 2, 4])data2 = torch.linspace(0, 10, 3)# 创建一个等差数列, 参数3:等差数列的个数print("data ==>", data2)  # tensor([ 0.,  5., 10.])def dm05_rand_Tensor():# 创建一个随机张量(会变)data1 = torch.rand(2, 3)print("data ==>", data1)# 创建一个随机种子(不会变)torch.manual_seed(2)  # 设置随机数种子data2 = torch.rand(2, 3)print("data ==>", data2)print(torch.random.initial_seed())  # 2# 创建一个全1张量, 形状和data1一样data3 = torch.ones_like(data1)print("data ==>", data3)# 创建一个全0张量, 形状和data1一样data4 = torch.zeros_like(data1)print("data ==>", data4)

③张量元素类型转换

  • 方式一:type(torch.xxxx)
  • data = data.type(torch.DoubleTensor)
  • data = data.type(torch.ShortTensor)
  • data = data.type(torch.IntTensor)
  • data = data.type(torch.LongTensor)
  • data = data.type(torch.FloatTensor)
  • 方式二:data.xxxx( )
  • data = data.double()
  • data = data.short()
  • data = data.int()
  • data = data.long()
  • data = data.float()

④张量类型转换

· 张量转换为NumPy数组
  • 方法一:data_numpy = data_tensor.numpy().copy()
  • 方法二:data_numpy = np.array(data_tensor)
def tensor_to_numpy():data_tensor = torch.tensor([2, 3])print("data_tensor ==>", data_tensor)# 深拷贝,不会返回去影响源数据tensor(避免内存共享)data_numpy = data_tensor.numpy().copy()data_numpy[0] = 0print("data_tensor ==>", data_tensor)print("data_numpy ==>", data_numpy)# data_tensor ==> tensor([2, 3])# data_numpy ==> [2 3]
· NumPy数组转换为张量
  • 默认共享内存:data_tensor = torch.from_numpy(data_numpy)
  • 默认不共享内存:data_tensor = torch.tensor(data_numpy)
def numpy_to_tensor():data_numpy = np.array([2, 3, 4])data_tensor = torch.from_numpy(data_numpy)# data_tensor = torch.from_numpy(data_numpy.copy())data_tensor[0] = 100print("data_tensor ==>", data_tensor)print("data_numpy ==>", data_numpy)# data_tensor ==> tensor([100,   3,   4])# data_numpy ==> [100   3   4]data_numpy = np.array([2, 3, 4])data_tensor2 = torch.tensor(data_numpy)data_tensor2[0] = 100print("data_tensor2 ==>", data_tensor2)print("data_numpy ==>", data_numpy)# data_tensor2 == > tensor([100, 3, 4])# data_numpy == > [2 3 4]
· 标量张量和数字转换
  • 当张量只包含一个元素时, 可以通过 item() 函数提取出该值 data.item( )
def tensor_type_cast():data = torch.tensor([30, ])print(data.item())data = torch.tensor(30)print(data.item())

3、张量数值计算

①基本计算

  • 加法:print(data.add(10))
  • 减法:print(data.sub(100))
  • 乘法:print(data.mul(100))
  • 除法:print(data.div(100))
  • 负数:print(data.neg())
  • 带下划线会修改原数据 (类似于pandas里面的replace=True) data.add_()
def dm01_basic_operation():torch.random.manual_seed(2)# 参1:shape, 参2:数据范围, 参3:数据形状data = torch.randint(0, 10, (2, 3))print(data)# 加法print(data.add(10))# 减法print(data.sub(100))# 乘法print(data.mul(100))# 除法print(data.div(100))# 负数print(data.neg())

②点乘运算、矩阵乘法

  • 点乘指的是两个同维矩阵对应位置的元素相乘 使用mul 和运算符 * 实现
  • 使用PyTorch的mul函数计算data和data2两个张量的逐元素乘积 print(torch.mul(data1, data2))
  • data变量乘以3的结果 print(data*3)

def dm02_Hadamard_operation():torch.random.manual_seed(2)data = torch.randint(0, 10, (2, 3))torch.random.manual_seed(4)data2 = torch.randint(0, 10, (2, 3))print("data1:", data)print("data2:", data2)# 打印data变量乘以3的结果print(data*3)# 使用PyTorch的mul函数计算data和data2两个张量的逐元素乘积,并打印结果print(torch.mul(data, data2))

文章转载自:

http://TYGKCgZl.gkdhf.cn
http://IyGyrfYY.gkdhf.cn
http://REBwMWXg.gkdhf.cn
http://wMtLrEEx.gkdhf.cn
http://Nn8eTXIv.gkdhf.cn
http://NqeQDzwN.gkdhf.cn
http://d9GFHzLZ.gkdhf.cn
http://CLSoo2tY.gkdhf.cn
http://Yylt7kyY.gkdhf.cn
http://I0cDjhvl.gkdhf.cn
http://aJrAXV7b.gkdhf.cn
http://Wd7tLdA1.gkdhf.cn
http://Pvp68Ymx.gkdhf.cn
http://aCA1IFP7.gkdhf.cn
http://0uV48VN7.gkdhf.cn
http://E1zTaLQJ.gkdhf.cn
http://4uyn0AoF.gkdhf.cn
http://VFT92wep.gkdhf.cn
http://NpQCh0BD.gkdhf.cn
http://iBwW56SH.gkdhf.cn
http://hZwjyHPf.gkdhf.cn
http://Q7qfTJqR.gkdhf.cn
http://MszueVmb.gkdhf.cn
http://o6XorCbY.gkdhf.cn
http://x75kRts5.gkdhf.cn
http://Tnuu8xHK.gkdhf.cn
http://dm1LON14.gkdhf.cn
http://X9WrGDr9.gkdhf.cn
http://JyiNJ58G.gkdhf.cn
http://2TlIkZzZ.gkdhf.cn
http://www.dtcms.com/a/384952.html

相关文章:

  • 国产化PDF处理控件Spire.PDF教程:在 ASP.NET Core 中创建 PDF的分步指南
  • 某村通信网络改造:从痛点到解决方案的全景分析
  • Elastic APM 入门指南:快速设置应用性能监控
  • 流式响应的demo , 前端markdown格式显示, 打字机效果展示
  • 【免费体验】旗讯 OCR手写识别:破解工厂数据处理痛点,实现从 “人工录入” 到 “AI读单” 的升级
  • 远程开机wakeonlan
  • 健康有益:车载健康化系统推动智能汽车健康管理新变革
  • JavaWeb--day6--MySQL(补漏)
  • 手机群控平台的智能管控技术深度解析
  • 什么是手持采集终端PDA?智慧移动工作的数字基石!
  • C语言中的递归问题——爬楼梯问题
  • LeetCode:2.字母异位词分组
  • 计算机视觉案例分享之实时文档扫描
  • 提升PDF处理效率,Stirling-PDF带你探索全新体验!
  • 【React】闭包陷阱
  • 4.RocketMQ集群高级特性
  • 周选择日历组件
  • Golang引用类型
  • Go的Gob编码介绍与使用指南
  • Golang语言入门篇001_Golang简介
  • Kafka消息队列进阶:发送策略与分区算法优化指南
  • 台积电生态工程深度解析:从晶圆厂到蜂巢的系统架构迁移
  • 机器学习-网络架构搜索
  • 邪修实战系列(5)
  • 突破限制:Melody远程音频管理新体验
  • 深入解析Seata:一站式分布式事务解决方案
  • static_cast:C++类型系统的“正经翻译官”
  • Python面试题及详细答案150道(126-135) -- 数据库交互篇
  • 【新书预告】《大模型应用开发》
  • MySQL 视图的创建与查看:从基础操作到核心技巧