深度学习——Tensor

一、理解

1.常数:scaler:0阶张量------标量

2.向量:vector:1阶张量

3.矩阵:matrix:2阶张量

4.三阶张量

二、创建张量的方法

1.使用列表创建Tensor

2.使用numpy数组创建Tensor

3.通过torch的API创建Tensor

python 复制代码
# 1.使用列表创建Tensor
t1 = torch.Tensor([1, 2, 3])
print(t1)
"""
tensor([1., 2., 3.])
"""

# 2.使用numpy数组创建Tensor
array1 = np.arange(12).reshape(3, 4)

t2 = torch.Tensor(array1)
print(t2)

# 3.通过torch的API创建Tensor
"""
torch.empty(3,4):创建3行四列的空的tensor,会用无用的数据进行填充
torch.ones([3,4]):三行四列全为1的tensor
torch.zeros([3,4]):三行四列全为0的tensor
torch.rand([3,4]):三行四列随机值在[0,1]之间的值
torch.randint(low = 0, high = 10, size = [3, 4]) 创建3*4的随机整数的Tensor,值区间:[low, high]
torch.randn([3,4]) 均值为0,方差为1,3*4的tensor
"""
print(torch.empty(3,4))
print(torch.ones([3,4]))
print(torch.zeros([3,4]))
print(torch.rand([3,4]))

三、张量的方法和属性

1.tensor.item(),当tensor中只有一个元素可以用的时候

2.Tensor转为ndarray

3.形状修改,tensor.view((3, 4)), 类似numpy中的reshape,是一种浅拷贝

4.获取维数、转置、轴滚动。

5.在方法后加_,会原地修改,相当于Tensorflow里的inplace

python 复制代码
# 1.tensor.item(),当tensor中只有一个元素可以用的时候
a =torch.tensor(np.arange(1))
print(a)
print(a.item()) #只有一个元素的时候可以用,返回一个python的标量,不可以用于多个元素的tensor
print('-'*50)
print(torch.Tensor([[[1]]]).item()) #获取一个tensor中的元素值
print('-'*50)

#%%
# 2.Tensor转为ndarray
t2 = torch.Tensor([[3,4]])
print(t2.numpy()) #tensor转为ndarray
print('-'*50)
print(t2.shape) #获取形状
print(t2.size()) #获取形状
print(t2.size(1))  #获取某个维度的数据,维度后的张量切片
#%%
t2
#%%
#写一个ndarray
array1 = np.array([[1,2,3],[4,5,6]])
print(id(array1))
array2=array1.reshape(3,2)
print(id(array2))
#%%
array2[0,0]=100
print(array1)
print(array2)
#%%
array1.ndim #获取维数
#%%
# 3.3.形状修改,tensor.view((3, 4)), 类似numpy中的reshape,是一种浅拷贝,仅仅形状发生改变,返回一个新的结果
t2 = torch.Tensor([[[3,4]]])
print(t2.size())
print(t2.view([1,2])) #[1,2]表示1行2列
print(t2.view([2])) # 一维tensor
#%%
b=t2.view([2, -1]) # -1表示自动计算
print(b)
print('-'*50)
print(t2) #t2的形状并没有发生改变
# https://pytorch.org/docs/stable/tensor_view.html
t2.untyped_storage().untyped().data_ptr() == b.untyped_storage().untyped().data_ptr() #判断两个tensor是否共享内存
#%%
b[0,0]=100
print(b)
print(t2) #t2的形状并没有发生改变
#%%
#3. 获取维数
print(t2.dim())

#4.获取最大值
print(t2.max())

#5.转置
t3 = torch.tensor([[1,3,4], [2,4,6]])
print(t3)
print(t3.t()) #转置


#%%
# 交换轴,这里的permute和rollaxis功能类型
t4 = torch.tensor(np.arange(24).reshape(2,3,4))
print(t4.shape)
print("-"*50)
print(t4.transpose(0,1).shape)#交换0轴和1轴
print("-"*50)
print(t4.permute(1, 0, 2).shape)#交换0轴和1轴,功能同上
print("-"*50)
print(t4.permute(1, 2, 0).shape)#变为了3*4*2
print("-"*50)
print(t4.permute(2, 1, 0).shape)#变为了4*3*2
#%%
t4.dtype
#%%
# 在方法后加_,会原地修改
x = torch.tensor(np.arange(12).reshape(3,4),dtype = torch.int8)
print(x)
y= torch.ones([3,4], dtype = torch.int64)
print(y)

print('-'*50)
x.sub_(y) # add_就地修改,不加下划线的会创建一个新的tensor来存储
print(x)
#%%
#tensor取值,和np完全相同
t5 = torch.tensor(np.arange(12).reshape(3,4))
print(t5)
print(t5[1,2]) #取值
print(t5[1]) #取一行
print(t5[:,1]) #取一列
print(t5[1:3,1:3]) #取一部分
print(t5[1:3,:]) #取一部分


#%%
#两个16行,1列的张量相减,求均值
t6 = torch.tensor(np.arange(16).reshape(16,1),dtype=torch.float32)
t7 = torch.tensor(np.arange(16,32).reshape(16,1),dtype=torch.float32)
print(t6)
print(t7)
((t6-t7)**2).mean()
#%%
#初始化两个张量,一个3,4,一个3,1,运算与ndarray相同
t8 = torch.tensor(np.arange(12).reshape(3,4),dtype=torch.float32)
t9 = torch.tensor(np.arange(3).reshape(3,1),dtype=torch.float32)
print(t8)
print(t9)
t8-t9
相关推荐
Elastic 中国社区官方博客4 小时前
使用 Discord 和 Elastic Agent Builder A2A 构建游戏社区支持机器人
人工智能·elasticsearch·游戏·搜索引擎·ai·机器人·全文检索
2501_933329554 小时前
企业级AI舆情中台架构实践:Infoseek系统如何实现亿级数据实时监测与智能处置?
人工智能·架构
阿杰学AI4 小时前
AI核心知识70——大语言模型之Context Engineering(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·数据处理·上下文工程
赛博鲁迅4 小时前
物理AI元年:AI走出屏幕进入现实,88API为机器人装上“最强大脑“
人工智能·机器人
管牛牛5 小时前
图像的卷积操作
人工智能·深度学习·计算机视觉
云卓SKYDROID5 小时前
无人机航线辅助模块技术解析
人工智能·无人机·高科技·云卓科技
琅琊榜首20206 小时前
AI生成脑洞付费短篇小说:从灵感触发到内容落地
大数据·人工智能
imbackneverdie6 小时前
近年来,我一直在用的科研工具
人工智能·自然语言处理·aigc·论文·ai写作·学术·ai工具
roman_日积跬步-终至千里6 小时前
【计算机视觉-作业1】从图像到向量:kNN数据预处理完整流程
人工智能·计算机视觉