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

深度学习第二章

2.1:数据操作

1、创建行向量:

张量:表示一个由数值组成的数组

创建一个含n个元素的行向量:

x = torch.arrange(n)
x

2、访问张量形状

x.shape

3、获取张量元素总数

x.numel()

4、改变张量形状

X = x.reshape(3, 4)
X

可以通过-1来自动计算出形状:

X = x.reshape(-1, 4)
X
X = x.reshape(3, -1)
X

5、创建只包含特定元素的张量

(1)创建全为0的张量:

torch.zeros((2, 3, 4))

创建了一个两层三行四列的全为0的张量

(2)创建全为1的张量:

torch.ones((2, 3, 4))

6、获取特定的形状的服从高斯分布的随机元素张量(均值为0,标准差为1)

标准差(Standard Deviation, 简称SD)是一种用于量化数据集中每个值相对于平均值(均值)的分散程度的统计指标。它反映了数据的离散程度,即数据点与均值的偏离程度。标准差越小,表示数据点越接近均值;标准差越大,表示数据点分布得越广。

torch.randn(3, 4)

7、为所需张量每个值进行赋值:

tensor:张量

torch.tensor([[2, 1, 3, 4], [1, 2, 3, 4], [4, 3, 2, 1]])

8、运算符:

求e的x次方:

x = torch.tensor([1, 2, 3, 4])
tensor.exp(x)

 9、连接两个张量:

torch.cat((X, Y), dim=0)

按0轴(行)连接两个张量。

10、对张量中所有元素求和

X.sum()

11、广播机制

进行广播的前提:

  • 维度大小一致或其中一个维度为 1

    • 对于每一个维度,两个张量的维度大小必须相等,或者其中一个维度的大小为 1。
  • 从末尾维度开始比较

    • 广播是从末尾的维度开始逐一比较的。也就是说,两个张量的末尾维度(最后一个维度)必须相等或其中一个为 1,然后逐步向前比较。

两个张量的形状不一致不能够进行运算会进行广播,多数情况下我们会对数组中长度为1的轴进行广播:

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2),reshape((1, 2))
a, b
a + b

矩阵将a复制列,矩阵b将复制行,然后元素相加

12、索引和切片

索引:

X[-1]

 切片:

X[1, 3]

取区间[1 ,3)左闭右开

可以根据指定索引将数据写入张量

X[1, 2] = 9

修改多行元素:

X[0:2, :] = 12
X

修改多列元素:

X[:, 0:2]
X

13、节省内存

通常我们在对一个张量进行运算过后,新的张量会存储在新的内存中:

before = id(y) // 获取y的内存地址
Y = Y + X
id(Y) == before

这是不可取的:

(1)我们不想总是不必要的分配内存,我们希望原地执行这些更新

(2)如果不原地更新,其他引用依然会指向就得内存位置,这样我们的某些代码会引用旧的数据

也可以使用X += Y,不能使用X = X + Y

14、转换为其他python对象

A = X.numpy()
B = torch.tensor(A)
type(A), type(B)

 将大小为1的张量转换为python标量:

a = torch.tensor([3.5])
a, a.item(), float(a), int(a)

2.2:数据预处理:

1、处理缺失值:

pd.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
  • data:要转换的数据,可以是 Pandas 的 Series、DataFrame 或者包含 Series 的字典。
  • prefix:哑变量列名的前缀,可以是字符串或字符串列表。
  • prefix_sep:前缀与原始列名之间的分隔符,默认是 '_'
  • dummy_na:是否为 NaN 值创建哑变量列,默认为 False,即不创建。
  • columns:要进行转换的列名列表。如果指定了 columns,只有这些列会被转换成哑变量。
  • sparse:是否返回稀疏矩阵,默认为 False
  • drop_first:是否删除每个变量的第一个水平(category),以避免多重共线性,默认为 False
  • dtype:指定生成的哑变量的数据类型。

实例:

import pandas as pd# 创建一个包含分类变量的 DataFrame
df = pd.DataFrame({'A': ['type1', 'type2', 'type3', 'type1', 'type2']})
print("原始数据:\n", df)# 将分类变量转换为哑变量
dummy_df = pd.get_dummies(df['A'])
print("\n转换后的哑变量数据:\n", dummy_df)

 输出:

原始数据:A
0  type1
1  type2
2  type3
3  type1
4  type2转换后的哑变量数据:type1  type2  type3
0      1      0      0
1      0      1      0
2      0      0      1
3      1      0      0
4      0      1      0

在这个示例中,pd.get_dummies() 将列 'A' 中的分类变量转换为哑变量。每个分类变量的每个水平(category)都会被转换成一个新的二进制列。

示例 2:使用前缀和前缀分隔符

import pandas as pd# 创建一个包含分类变量的 DataFrame
df = pd.DataFrame({'A': ['type1', 'type2', 'type3', 'type1', 'type2']})# 使用前缀和前缀分隔符
dummy_df = pd.get_dummies(df['A'], prefix='category', prefix_sep='-')
print(dummy_df)

输出:
 

   category-type1  category-type2  category-type3
0               1               0               0
1               0               1               0
2               0               0               1
3               1               0               0
4               0               1               0

在这个示例中,使用了前缀 'category' 和前缀分隔符 '-',生成了带有前缀的哑变量列。

2、转换为张量格式

X, y = torch.tensor(inputs.value), torch.tensor(output.values)
X, y

 

相关文章:

  • Perplexity AI — 探索网络,发掘知识,沟通思想
  • 基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真
  • MySQL之优化服务器设置(五)
  • 几何公差的设计和选用
  • k8s-kubernetes常用命令,服务部署,可视化控制台安装及token的生成
  • 【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?
  • 富格林:细心发现虚假确保安全
  • 分层解耦
  • 【高端精品】最新手机版微信小程序(拼多多+京东)全自动操作项目
  • springcloud入门与实践
  • Django 中间件
  • 飞书API 2-1:如何通过 API 创建文件夹?
  • Endless OS简介
  • 【学习-华为HCIA数通网络工程师真题(持续更新)】(2024-6-16更)
  • 经典电源电路基础(变压-整流-滤波-稳压)
  • 【React系列】如何构建React应用程序
  • 2019年如何成为全栈工程师?
  • java多线程
  • Python学习之路16-使用API
  • 闭包,sync使用细节
  • 从零搭建Koa2 Server
  • 聊聊flink的TableFactory
  • 前端存储 - localStorage
  • 前端面试题总结
  • 深入浅出Node.js
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Spring第一个helloWorld
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $jQuery 重写Alert样式方法
  • %@ page import=%的用法
  • (C11) 泛型表达式
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)Linq学习笔记
  • (转)Sql Server 保留几位小数的两种做法
  • (转)人的集合论——移山之道
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET : 在VS2008中计算代码度量值
  • .net FrameWork简介,数组,枚举
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET值类型变量“活”在哪?
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [20150321]索引空块的问题.txt
  • [20161214]如何确定dbid.txt