Pytorch学习记录( 一)

📅 2026/7/9 11:48:36
Pytorch学习记录( 一)
自用用于记录黑马程序员《神经网络与深度学习》课程学习目录一、Day02-02 张量和NumPy的相互转换1、张量转Numy1.1、共享内存1.2、不共享内存2、Numy转torch2.1、共享内存2.2、不共享内存3、从标量张量中提取内容3.1标量张量.item()4、完整代码一、Day02-02 张量和NumPy的相互转换1、张量转Numy1.1、共享内存张量对象.numpy()#创建张量 t1 torch.tensor([1,2,3,4,5])#共享内存 print(ft1:{t1},type:{type(t1)}) #张量转Numy n1 t1.numpy() n1[0] 100 print(fn1:{n1},type:{type(n1)}) print(ft1:{t1}) print(fn1:{n1})输出可以看到经过numpy后n1变为了Numy类型且当修改n1的值时t1的值也随之改变。1.2、不共享内存张量对象.numpy().copy()#创建张量 t1 torch.tensor([1,2,3,4,5]) print(ft1:{t1},type:{type(t1)}) #张量转Numy #n1 t1.numpy()#共享内存 n1 t1.numpy().copy()#不共享内存 n1[0] 100 print(fn1:{n1},type:{type(n1)}) print(ft1:{t1}) print(fn1:{n1})可以看到当修改n1后t1值不变。2、Numy转torch2.1、共享内存torch.from_numpy(Numy对象)2.2、不共享内存torch.tensor(NumPy对象)#创建numpy n2 np.array([11,22,33]) #转为torch t2 torch.from_numpy(n2)#共享内存 #t2 torch.tensor(n2)#不共享内存 print(fn2:{n2},type:{type(n2)}) print(ft2:{t2},type:{type(t2)})3、从标量张量中提取内容标量张量.item()#创建标量张量 t3 torch.tensor(100) #提取内容 value t3.item() print(ft3:{t3},type:{type(t3)}) print(fvalue:{value},type:{type(value)})4、完整代码 Tensor.numpy函数可以将张量转换为ndarray数组,但是共享内存,可以使用copy函数避免共享 使用from_numpy可以将ndarray数组转为Tensor,默认共享内存,可以使用copy函数避免共享 torch.tensor可以将ndarray数组转为Tensor,默认不共享内存 item() 标量张量和数字转换 import torch import numpy as np #张量-numpy def demo01(): #创建张量 t1 torch.tensor([1,2,3,4,5]) print(ft1:{t1},type:{type(t1)}) #张量转Numy #n1 t1.numpy()#共享内存 n1 t1.numpy().copy()#共享内存 n1[0] 100 print(fn1:{n1},type:{type(n1)}) print(ft1:{t1}) print(fn1:{n1}) #numpy-张量 def demo02(): #创建numpy n2 np.array([11,22,33]) #转为torch t2 torch.from_numpy(n2)#共享内存 t2 torch.tensor(n2)#不共享内存 print(fn2:{n2},type:{type(n2)}) print(ft2:{t2},type:{type(t2)}) #标量张量中提取内容 def demo03(): #创建标量张量 t3 torch.tensor(100) #提取内容 value t3.item() print(ft3:{t3},type:{type(t3)}) print(fvalue:{value},type:{type(value)}) if __name__ __main__: #demo01() #demo02() demo03()二、Day02-03 张量的基本运算本节内容简单不赘述三、Day02-04 张量点乘和矩阵乘法import torch #点乘 行列相同 def demo01(): t1 torch.tensor([[1,2,3],[4,5,6]]) print(ft1:{t1}) t2 torch.tensor([[1,2,3],[4,5,6]]) print(ft2:{t2}) t3 t1 * t2 #点乘 #t2 t1.mlt(t2) #效果同上 print(ft3:{t3}) #矩阵乘法 要求两个矩阵行列 def demo02(): t1 torch.tensor([[1,2,3],[4,5,6]]) print(ft1:{t1}) t2 torch.tensor([[1,2,3],[4,5,6],[7,8,9]]) print(ft2:{t2}) t3 t1 t2 print(ft3:{t3}) if __name__ __main__: #demo01() demo02()较为简单。唯一需要注意的是矩阵乘法符号为四、Day02-05 张量的常用运算函数五、Day02-06 张量的索引操作 简单行列索引 列表索引 范围索引 布尔索引 多维索引 import torch torch.manual_seed(24) #设置随机种子 t1 torch.randint(1,10,(5,5)) #创建随机向量 print(ft1:{t1}) print(-*30) #简单行列索引 print(f第2行:{t1[1]}) print(f第2行所有列:{t1[1,:]}) print(f所有行的第3列:{t1[:,2]}) print(-*30) #简单列表索引 #索引时前面表示行后边表示列 print(t1[[1,3],[2,4]])#索引的是第3行3列、4行5列的数 print(t1[[[0],[1]],[1,2]])#第1、2行2、3列的数据 print(-*30) #简单范围索引 print(f前3行前2列:{t1[:3,:2]}) print(f第2行到最后一行的前2列:{t1[1:,:2]}) print(f所有奇数行偶数列:{t1[1::2,0::2]})#从1开始步长为2,从0开始步长为2 print(-*30) #简单布尔索引 print([t1[t1[:,2] 5]])#第3列大于5的行数据 print(t1[:,t1[1,:]5])#第2行大于5的列的所有数据 print(t1[1,t1[1,:]5])#第2行中所有大于5的元素 print(-*30) #简单多维索引 t2 torch.randint(1,10,(2,3,4)) print(ft2:{t2}) print(t2[0,:,:])#0轴的第一个数据 即第一个3x4的张量 print(t2[:,0,:])#1轴的第一个数据 print(t2[:,:,0])#2轴的第一个数据