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.视频笔记截图

 

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

  1. 【Pytorch神经网络基础理论篇】 07 线性回归 + 基础优化算法

    一.线性代数 回归是指一类为一个或多个自变量与因变量之间关系建模的方法.在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系. 在机器学习领域中的大多数任务通常都与预测(prediction ...

  2. 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

    3.4. softmax回归 回归可以用于预测多少的问题. 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数. 事实上,我们也对分类问题感兴趣:不是问"多少" ...

  3. 【Pytorch神经网络基础理论篇】 06 自动求导+导数与微分

    0.导数和微分 0.1逼近法 在2500年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法. 为了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形,内 ...

  4. 【Pytorch神经网络基础理论篇】 02 pytorch环境的安装

    1.要注重在真实数据上的模型动手能力 2.要学会给别人讲一遍,充分理解[最高境界] CSDN上有很多就不介绍了 3060+11.3CUDA+Pytorch避坑指南 - 知乎 https://zhuan ...

  5. 【Pytorch神经网络基础理论篇】 04 线性代数

    1.基本概念 2.线性代数的实现 2.1标量 标量由只有一个元素的张量表示. import torchx = torch.tensor([3.0]) y = torch.tensor([2.0])x ...

  6. 【Pytorch神经网络基础理论篇】 01 从零开始介绍深度学习算法和代码实现

    1.AI的分类: 2.深度学习的应用: 3.案例研究-广告点击 QA: 1.深度学习的模型的可解释性是黑盒,业界都是比较关心的,但是确实是一个放弃的地方.为什么有效和可解释性并不是相同的.一个模型在一 ...

  7. 【Pytorch神经网络基础理论篇】 05 矩阵计算

    QA: 1.梯度下降仅仅在凸函数中获得最优解,机器学习不关心确定性问题P,仅关心不确定性问题NP. 2.pytorh采用的是自动微分和计算图,不会再使用手动微分实现.

  8. 04 数据操作 + 数据预处理【动手学深度学习v2】

    数据操作 宽是列的个数 4维是n个3维数组放一起 比如每次读128张图片 5维 视频 有时间维度 [1:3,1:] 1:3--拿1,2行,左闭右开 1:--拿1到所有列 [::3,::2] ::所有行 ...

  9. Hive:命令行界面、数据类型、DDL数据定义(数据库及表操作/分区分桶)、DML数据操作(数据导入导出)

    目录 1.Hive命令行界面 1.1.选项列表 1.2.变量和属性 1.2.1.Hive中变量和属性命名空间 1.2.2.用户自定义变量 1.2.3..hiverc文件 1.3.一次使用的命令 1.4 ...

最新文章

  1. 基于运动信息的物体检测(背景差分法、帧间差分法和光流法)。
  2. 一个关于hashCode的追问!
  3. 第21章:MongoDB-聚合操作--聚合管道--$geoNear
  4. 小康陪你学JAVA--------三大循环之Do-while循环
  5. CPU-内存-IO-网络调优
  6. 从事前到事后,云数据库 Redis MongoDB 安全体系全揭秘!
  7. python中的元类_理解python中的元类
  8. mysql连接量设置_mysql连接数设置操作方法(Too many connections)
  9. Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position xx: 解决方案
  10. 转------计算机网络面试小宝典
  11. IOS和安卓微信打开网页,界面显示差异大的问题。
  12. 如何强制解锁或删除被占用的文件或文件夹 - ForceDelete绿色强制文件删除工具
  13. 笨方法学 python3怎么样_笨办法学python3日常问题解决
  14. ie窗口如何最大化设置
  15. lab2 binary bomb 详解
  16. ARPG角色扮演页游《明朝江湖》全套代码
  17. 吴军《智能时代》读书笔记
  18. 嵌入式编程与软件编程思想不同浅见
  19. vue中将html页面转为图片并且下载该图片
  20. 360校园招聘2015届技术类笔试题(一)

热门文章

  1. pycharm打开ipynb显示为文本格式解决办法
  2. Map.putAll方法——追加另一个Map对象到当前Map集合
  3. iphone11右上角信号显示_苹果iOS11信号强度的标志变了意味着什么?
  4. 深度学习之目标检测:R-CNN、Fast R-CNN、Faster R-CNN
  5. Exception in thread main java.lang.UnsupportedClassVersionError的另类解决办法
  6. appsettings 连接oracle数据库,ABP .net core集成访问Oracle数据库
  7. 445端口 mysql_关于如何关闭window端口445的详细介绍
  8. yii2 ajax分页,Yii框架分页技术实例分析
  9. VS2017打开低版本的VS MVC架构的项目的时候需要修改的地方
  10. 1.7.08:字符替换