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

第二章 预备知识(数据操作、数据预处理)

2.1数据操作

2.1.1张量数据类型

使用n维数组,张量(tensor)数据类型进行深度学习

张量具有一个轴称为向量,两个轴称为矩阵

.arange()函数生成行向量

import torch
x=torch.arange(12)
print(x)
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

.shape属性访问张量沿每个轴的形状

print(x.shape)
torch.Size([12])

.numel()函数查询张量中元素的总数

print(x.numel())
12

.sum()函数对张量中所有元素求和并产生单张量

print(x.sum())
tensor(66)

.reshape()改变张量形状

张量形状改变后,张量的大小不会变

y=x.reshape(3,4)
print(y)
print(y.numel())
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
12

当我们只需要指定一个维度,另一维度可以使用-1,自动计算得到另一维度

.zeros()生成所有元素为0的张量

print(torch.zeros((2,3,4)))
tensor([[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]],[[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]]])

.ones()生成所有元素为1的张量

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

.randn()生成随机张量

print(torch.randn(3,4))
tensor([[-1.5250,  0.5136, -1.0154, -0.1906],[-0.5657, -0.8168, -0.0836, -0.1606],[-0.4388, -0.5666,  0.3631, -0.8722]])

随机生成的每个元素从均值为0,标准差为1的高斯分布中随机采样

2.1.2运算符

按元素运算

例如加减乘除幂运算等标准运算符,对相应位置元素进行运算

import torch
x=torch.tensor([1,2,4,8])
y=torch.tensor([2,2,2,2])
print(x+y)
print(x-y)
print(x*y)
print(x**y)
print(torch.exp(x))

张量连结

使用.cat()将两个张量连结起来,沿行连结(dim=0),沿列连结(dim=1)

import torch
x=torch.tensor([[1,2,4,8],[2,4,6,8]])
y=torch.tensor([[2,2,2,2],[1,1,1,1]])
print(torch.cat((x,y),dim=0))
print(torch.cat((x,y),dim=1))
tensor([[1, 2, 4, 8],[2, 4, 6, 8],[2, 2, 2, 2],[1, 1, 1, 1]])
tensor([[1, 2, 4, 8, 2, 2, 2, 2],[2, 4, 6, 8, 1, 1, 1, 1]])

2.1.3广播机制

通过适当复制元素来扩展一个或两个数组,以便在转换后,两个张量具有相同的形状

import torch
x=torch.tensor([[0],[1],[2]])
y=torch.tensor([0,1])
print(x+y)

先通过广播机制将数据扩展为相同形状张量后再进行运算

tensor([[0, 1],[1, 2],[2, 3]])

2.1.4索引和切片

和python中其他数组一样,使用[a:b]。其中,包括a,不包含b

import torch
x=torch.tensor([[0, 1],[1, 2],[2, 3]])
print(x[1:3])
tensor([[1, 2],[2, 3]])

也可以进行特定位置元素的更改, :表示这一列所有的值

x[0:2,:]=9
print(x)
tensor([[9, 9],[9, 9],[2, 3]])

2.1.5转换为其他Python对象

pytorch支持numpy数据类型和tensor数据类型的互相转换

.numpy()函数将tensor类型转换为ndarray类型

import torch
x=torch.arange(12)
A=x.numpy()
B=torch.tensor(A)
print(type(A))
print(type(B))
<class 'numpy.ndarray'>
<class 'torch.Tensor'>

.item()函数将数据转换为python中的标量

import torch
x=torch.tensor([3.5])
print(x)
print(x.item())
tensor([3.5000])
3.5

2.2数据预处理

2.2.1读取数据集

使用os库创建数据集

import os
os.makedirs(os.path.join("..","data"),exist_ok=True)#创建文件目录exist_ok=True如果目录已存在不会报错
data_file=os.path.join("..","data","house_tiny.csv")
with open(data_file,'w') as f:f.write("NumRooms,Alley,Price\n")f.write("NA,Pave,127500\n")f.write("2,NA,10600\n")f.write("4,NA,178100\n")f.write("NA,NA,140000\n")

创建名为data_file的csv格式文件并写入数据

使用pandas库读取数据

import pandas as pd
import os
data_file=os.path.join("..","data","house_tiny.csv")
data=pd.read_csv(data_file)
print(data)
   NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN   10600
2       4.0   NaN  178100
3       NaN   NaN  140000

2.2.2处理缺失值

插值法:用一个替代值弥补缺失值

删除法:直接忽略缺失值

插值法

对于数值类型的数据用平均值来代替缺失值

inputs=data.iloc[:,0:2]
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())
print(inputs)
   NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

iloc 是 integer location 的缩写,用于通过行和列的位置索引(整数位置)来选择数据

fillna 用于填充DataFrame或Series中的缺失值(NaN值)

对于类别值,将每种类别视为一列,正确的为1,错误的为0

inputs=pd.get_dummies(inputs,dummy_na=True)
print(inputs)
   NumRooms  Alley_Pave  Alley_nan
0       3.0        True      False
1       2.0       False       True
2       4.0       False       True
3       3.0       False       True

pd.get_dummies() 将分类变量转换为虚拟变量,每个类别创建一个新的二进制列。

dummy_na=True 会为缺失值创建单独的虚拟变量列(默认为False)

2.2.3转换为张量格式

先利用pands数据类型的to_numpy()函数将 pandas DataFrame 转换为 NumPy 数组,再将 NumPy 数组转换为 PyTorch 张量

import pandas as pd
import os
import torch
data_file=os.path.join("..","data","house_tiny.csv")
data=pd.read_csv(data_file)
inputs=data.iloc[:,0:2]
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())
inputs=pd.get_dummies(inputs,dummy_na=True)
print(type(inputs))
a=inputs.to_numpy(dtype=float)
print(type(a))
x=torch.tensor(inputs.to_numpy(dtype=float))
print(type(x))
<class 'pandas.core.frame.DataFrame'>
<class 'numpy.ndarray'>
<class 'torch.Tensor'>
http://www.dtcms.com/a/454433.html

相关文章:

  • 网站开发语言分为几种seo推广的作用
  • 网站空间地址哈尔滨网站设计人
  • 网站搭建运营网站可以做第三方检测报告
  • 凡客装修永康关键词优化
  • 【Spring AI】-Spring AI 概述与环境搭建
  • 什么是Maven?关于 Maven 的标准化结构、配置与项目创建
  • 在学校Linux服务器上配置go语言环境
  • 许昌做网站的公司长春做线上推广的科技公司
  • 广东省建设厅的注册中心网站建网站的公司哪里好
  • 自己做电影网站违法吗做个营销型网站设计
  • 树上启发式合并 学习记录
  • MCP 的核心概念和例子
  • 淘客做网站运营国际网站怎么样做
  • 数据结构-算法C++(额外问题汇总)
  • 广州制作外贸网站邯郸wap网站建设公司
  • 在 Ubuntu22.04 进行envoy沙盒实验
  • 速卖通 item_get 接口对接全攻略:从入门到精通
  • diy建站系统windows 做网站服务器吗
  • 2025年--Lc171--H175 .组合两个表(SQL)
  • 贪心算法 | 每周8题(二)
  • 杭州知名的企业网站建设策划连云港吧
  • 建设工程网站有哪些黄骅贴吧最近发生的事
  • 广西网站建设招标公司如何用网站做招聘
  • 网络引流怎么做啊?百度关键词seo排名优化
  • 【开题答辩全过程】以 爱学习教育网站为例,包含答辩的问题和答案
  • 做旅游攻略去什么网站好广告设计与制作短期培训班
  • 搭建个人博客网站找国内外贸公司的网站
  • Halcon---3D知识点总结(待整理完善)
  • 速卖通自养号测评系统构建指南:三大核心技术要点解析
  • 中国城乡建设厅网站首页长沙企业推广