[Hands-on deep learning] 数据操作与预处理——矩阵计算

 

注: 深度学习过程中通常不是一张图片一张图片的去读,而是一组批量大小的图片去读(batch)

注:行和列都从0开始 (其中一列错误应为[:,1])

数据操作

import torch

x = torch.arange(12)
x.shape 
x.numel() #里面元素的种数 永远是标量
x = x.reshape(3,4) # 只改变形状而不改变元素
y = torch.zero((2,3,4)) # 2维3行4列
z = torch.ones((2,3,4))

# 张量是任意维度

x = torch.tensor([1.0, 2, 4, 8])
torch.exp(x)

x = torch.arange(12, dtype= torch.float32).reshape((3,4))
# 0表示y方向的拼接,1表示x方向的拼接
torch.cat((X,Y),dim=0), torch.cat((X,Y),dim=1) 

X.sum()
X[0:2,:] = 12

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

# 执行原地操作
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
id(X) == before
(TRUE)

# numpy张量
A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
a = torch.tensor([3.5])
a,a.item(), float(a),int(a)






数据预处理

# 读取csv文件

import os
import torch
import pandas as pd

os.makedirs(os.path.join('..','data'),exist_ok=True)
# 创建一个文件(csv)存放数据
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRoom,Alley,Price\n')  # 列名
    f.write('NA, PAVE,127500\n')  # 每行对应一个样本数据
    f.write('2,NA,106000\n')  # NA代表未知数
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

data = pd.read_csv(data_file)

inputs, outputs = data.iloc[:,0:2], datailoc[:,2]
# 未知的数用均值填充
inputs = inputs.fillna(inputs.mean())
print(inputs)
# 将缺失的数据分类(纯01的矩阵)
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
print(x,y)



线性代数实现

A = torch.arange(20).reshape(5,4)
A.T
B = torch.arange(24).reshape(2,3,4)

A = torch.arange(20, dtype = torch.float32).reshape(5,4)
#通过分配新内存,将A的副本拷贝给B
B = A.clone()
A,A+B,A*B

A_sum_axis0 = A.sum(axis=0)
A_sum_axis1 = A.sum(axis=1)

# 求平均值
A.mean(), A.sum/A.numel()

# 不想丢失维度,即三维按某一维求和时,就变成了二维,丢失了维度
# 保存维度不变
sum_A = A.sum(axis = 1, keepdims=True)

# 点积是相同位置的按元素乘积的和
y = torch.ones(4, dtype=torch.float32)
x, y, torch.dot(x,y)

# 范数L2
u = torch.tensor([3.0, -4.0])
torch.norm(u)
# 范数L1(绝对值求和)
torch.abs(u).sum()

# 矩阵范数
torch.norm(torch.ones((4,9)))






 按特定轴相加

按行为轴0,按列为轴1

 矩阵计算:

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值