注: 深度学习过程中通常不是一张图片一张图片的去读,而是一组批量大小的图片去读(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
矩阵计算: