【Pytorch神经网络基础理论篇】 03 数据操作 + 数据预处理

同学你好!本文章于2021年末编写,已与实际存在较大的偏差!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

1.数组样例

 2.数据操作(代码实现与结果截图)

#首先导入torch,虽然被称为pytorch,但是我们应该导入torch而不是pytorch
import torch
#张量表示一个数值组成的数组,这个数字可能有多个维度
#这个行向量包含从0开始的前12个整数,默认创建为浮点数。张量中的每个值都称为张量的元素(element)。
#例如,张量x中有12个元素。除非额外指定,否则新的张量将存储在内存中,并采用基于CPU的计算。
x=torch.arange(12)x

x.shape() #shape不是函数哦

#通过张量的shape属性来访问张量的形状 (沿每个轴的长度)
x.shape

x.numel() #x的总数

#要改变一个张量的形状,而不改变元素的数量和元素值,我们可以调用reshape()
#注意,通过改变张量的形状,张量的大小不会改变。
x = x.reshape(3,4)
x#不需要通过手动指定每个维度来改变形状。
#如果我们的目标形状是(高度,宽度),那么在知道宽度后,高度应当会隐式得出,我们不必自己做除法。在上面的例子中,为了获得一个3行的矩阵,我们手动指定了它有3行和4列。幸运的是,张量在给出其他部分后可以自动计算出一个维度。
#可以通过在希望张量自动推断的维度放置-1来调用此功能。
#即 x.reshape(-1,4) 或 x.reshape(3,-1)  等价于 x.reshape(3,4)。

#使用全0的张量
torch.zeros((2,3,4))

#使用全1的张量
torch.ones((2,3,4))

#使用包含数值的python列表给张量中的每个元素赋予确定值
torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])

#标准算数运算符可以升级为按照元素运算
x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])
x + y,x - y,x * y,x / y, x**y # **运算符是求幂运算

#创建一个形状为(3,4)的张量。其中的每个元素都从均值为0、标准差为1的标准高斯(正态)分布中随机采样。
torch.randn(3, 4)
tensor([[-0.9464,  0.7712, -0.0070,  1.0236],[-2.1246, -0.7854, -1.9674, -0.1727],[ 0.0397, -0.0477, -0.0160, -0.0113]])
#按元素的方式进行更多的计算
torch.exp(x)

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
torch.cat((X,Y),dim=0), torch.cat((X,Y),dim=1) #dim=0按列排列 #dim=1按行排列

#通过逻辑运算符构建二元张量
X == Y
#对于每个位置,如果X和Y在该位置相等,则新张量中相应项的值为1,这意味着逻辑语句X == Y在该位置处为真,否则该位置为0。

#对于张量中的所有元素求和会产生只有一个元素的张量
X.sum()

2.1.3广播机制

在某些情况下,即使形状不同,我们仍然可以通过调用广播机制(broadcasting mechanism)来执行按元素操作。这种机制的工作方式如下:首先,通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状。其次,对生成的数组执行按元素操作。

#形状不同 张量会进行广播机制
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a,b #广播机制

#由于a和b分别是 3×1 和 1×2 矩阵,如果我们让它们相加,它们的形状不匹配。我们将两个矩阵广播为一个更大的 3×2 矩阵,如下所示:矩阵a将复制列,矩阵b将复制行,然后再按元素相加。
a + b

#[-1]选择最后一个元素,[1:3]选择第二个和第三个元素
X[-1],X[1:9] #1到9 但是最多有2行所以就显示了第1行和第2行

#通过指定索引来将元素写入矩阵
X[1,2]=9
X

#为多个元素赋相同的值
X[0:2,:] =12 #将0至2行,全部赋值为12
X

#运行一些操作可能会为新结果分配内存
before = id(Y) 
Y = X + Y
id(Y) == before

#执行原地操作 内存没有变化
Z = torch.zeros_like(Y)
print('id(Z)',id(Z))
Z[:] = X + Y
print('id(Z)',id(Z))

#如果后续计算中没有重复使用x,我们可以使用x[:]=X+Y 或者 x+=y来减少操作的内存开销
before = id(X)
X += Y #+=的本质是调用append()
id(X) == before

A = X.numpy() #转化为numpy张量
B = torch.tensor(A)
type(A),type(B)

a = torch.tensor([3.5])#将大小为1的张量转化为python的标量
a,a.item(),float(a),int(a)

3.csv的读取(代码实现与结果截图)

我们将简要介绍使用pandas预处理原始数据并将原始数据转换为张量格式的步骤。我们将在后面的章节中介绍更多的数据预处理技术。

import os
#创建一个人工数据集并且存储在csv(逗号分割值)的文件中
os.makedirs(os.path.join('..','data'),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')  # 第1行的值f.write('2,NA,106000\n')  # 第2行的值f.write('4,NA,178100\n')  # 第3行的值f.write('NA,NA,140000\n')  # 第4行的值

import pandas as pd
#从创建的csv文件中加载原始数据集
data = pd.read_csv(data_file)
print(data)

data

#注意,“NaN”项代表缺失值。为了处理缺失的数据,典型的方法包括插值和删除,其中插值用替代值代替缺失值。而删除则忽略缺失值。在这里,我们将考虑插值。#通过位置索引iloc,我们将data分成inputs和outputs,其中前者为data的前两列,而后者为data的最后一列。对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项。
inputs,outputs = data.iloc[:,0:2],data.iloc[:,2]
inputs = inputs.fillna(inputs.mean()) #在缺失数据处 添加平均值
print(inputs)

 

#对于inputs中的类别值或离散值,我们将NaN视为一个类别
inputs = pd.get_dummies(inputs,dummy_na=True) #按类分
print(inputs)

 

import torch
X, y = torch.tensor(inputs.values),torch.tensor(outputs.values)
X, y

3.QA

1. b=a.reshape 并没有申请新的内存空间
 

2.学习一下numpy

3.快速区分维度:a.shape


4.视频笔记截图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

git版本控制系统常用指令,Xmind笔记整理

git仓库使用、项目版本管理基本常用指令 纯手工整理Xmind笔记: 点我下载 预览图: Png: 如有错误,谢谢指出

Spark学习(一) -- Spark安装及简介

标签(空格分隔): Spark 学习中的知识点:函数式编程、泛型编程、面向对象、并行编程。 任何工具的产生都会涉及这几个问题: 现实问题是什么?理论模型的提出。工程实现。思考: 数据规模达到一台机…

ValueError:only one element tensors can be converted to Python scalars

缘由是:要转换的list里面的元素包含多维的tensor。c

java起步

例1: javac HelloWorld.java 这是编译 java HelloWorld 这是运行 gedit helloworld.javapublic class helloworld {public static void main(String args[]){int num;num3;System.out.println("this is num"num);} }

Django基本概念、安装、配置到实现框架,Xmind学习笔记

Django从安装、配置到实现简单web框架的基本操作流程 纯手工Xmind笔记整理: 点我下载 预览图: 如有错误,谢谢指出

解决若要安装 Microsoft Office 2010,需要MSXML 版本 6.10.1129的问题

单击 开始单击 运行键入 注册表编辑器然后单击 确定.找到HKEY_CLASSES_ROOT\TypeLib\{F5078F18-C551-11D3-89B9-0000F81FE221}\6.0\0\win32。用鼠标右键单击 win32然后单击 权限.为自己授予完全控制到的项。双击 (默认值) 在下的值 win32然后再更改它的值…

ValueError matplotlib display text must have all code points 128 or use Unicode strings

错误问题&#xff1a;ValueError: matplotlib display text must have all code points < 128 or use Unicode strings 错误原因&#xff1a;在使用matplotlib进行图表展示时&#xff0c;如果需要在图表上添加中文&#xff0c;可能会报字符类型的值错误。 解决办法&#x…

VC6.0常见英文错误对照表

fatal error C1003: error count exceeds number; stopping compilation 中文对照&#xff1a;&#xff08;编译错误&#xff09;错误太多&#xff0c;停止编译 分析&#xff1a;修改之前的错误&#xff0c;再次编译 fatal error C1004: unexpected end of file found 中文…

Django 页面报错 Maximum recursion depth exceeded

Django 页面报错 Maximum recursion depth exceeded 原因&#xff1a; 视图中某个方法或函数的名称与django模块里的方法重名&#xff0c;而且在内部又调用了同名的方法导致重复调用自己 解决方法&#xff1a; 1、logout()换一个命名 # 退出登录使用logout(request)&#xf…

PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)

1045. 快速排序(25) 时间限制200 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 作者 CAO, Peng著名的快速排序算法里有一个经典的划分过程&#xff1a;我们通常采用某种方法取一个元素作为主元&#xff0c;通过交换&#xff0c;把比主元小的元素放到它的左边&…

智慧交通day03-车道线检测实现06:车道线定位及拟合+代码实现

学习目标 了解直方图确定车道线位置的思想我们根据前面检测出的车道线信息&#xff0c;利用直方图和滑动窗口的方法&#xff0c;精确定位车道线&#xff0c;并进行拟合。 1. 定位思想 下图是我们检测到的车道线结果&#xff1a; 沿x轴方向统计每一列中白色像素点的个数&…

USB驱动程序

1、USB驱动程序存在于不同的内核子系统(块设备、网络设备、字符设备等等)和USB主控制器之中。 2、USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,而不必考虑系统当前存在的各种不同类型的USB硬件控制器。 2.1 USB里的设备模型 Linux里一个很重要的概念是设备…

TemplateSyntaxError at XXXX或页面样式未生效

报错TemplateSyntaxError at或页面样式未生效 直观原因就是模板的语法有误&#xff0c;造成这一原因的根源是使用pycharm&#xff08;idea&#xff09;的自动注释&#xff0c;而pycharm没有装django配置&#xff0c;ctrl/时会将block中的内容用html注释<!—>包围内容 对…

智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现

学习目标 知道车道曲率计算的方法知道计算中心点偏离距离的计算1.曲率的介绍 曲线的曲率就是针对曲线上某个点的切线方向角对弧长的转动率&#xff0c;通过微分来定义&#xff0c;表明曲线偏离直线的程度。数学上表明曲线在某一点的弯曲程度的数值。曲率越大&#xff0c;表示…

Tomcat崩溃

参考&#xff1a; http://bbs.csdn.net/topics/390391810?page1 自己遇到的&#xff1a; ------------------------------------------------------------------------------------------------------------------------------------------------------------------ ## A fata…

写给在深圳奋斗的我

在写这文章之前考虑了很久&#xff0c;打算以真实的情况来描写这段时间 我2012年毕业&#xff0c;以校招的身份进入了TCL&#xff0c;实属万分幸运&#xff0c;在那里认识了很多这辈子都值得深交的同学&#xff0c;朋友&#xff0c;战友&#xff0c;说到战友&#xff0c;那是因…

Django模板中如何将函数的变量作为字典key并获取对应的value

Django模板中如何将函数的变量作为字典key并获取对应的value 问题 现有一字典 mydict {abc: 123} key abc传入到模板后 在模板html中你可能像下面这样&#xff0c;来取出字典的值 {% block base %} ... {{ mydict[key] }} ... {% endblock %}但在模板中并不支持Python列表…

智慧交通day03-车道线检测实现08: 在离线视频(非实时)中检测车道线+代码实现

学习目标 了解在视频中检测车道线的方法在前面几节中一步步完成摄像机标定、图像畸变校正、透视变换、提取车道线、检测车道线、计算曲率和偏离距离后&#xff0c;在图像上实现了复杂环境下的车道线检测算法。现在我们将视频转化为图片&#xff0c;然后一帧帧地对视频数据进行处…

gets函数

#include "stdio.h" /**/ void main() {char a[100];while(gets(a)!NULL){printf("Owen.wei%s\n",a);} // char *str1NULL;printf("hello w23232323orld2!\n"); }

智慧交通day03-车道线检测实现09:车道线检测代码汇总(Python3.8)

import cv2 import numpy as np import matplotlib.pyplot as plt #遍历文件夹 import glob from moviepy.editor import VideoFileClip"""参数设置""" nx 9 ny 6 #获取棋盘格数据 file_paths glob.glob("./camera_cal/calibration*.jpg…