[深度学习]搭建开发平台及Tensor基础

一、实验目的

  1. 掌握Windows下PyTorch 深度学习环境的配置

  2. 掌握一种PyTorch开发工具

  3. 理解张量并掌握Tensor的常用操作(创建、调整形状、加、减、乘、除、取绝对值、比较操作、数理统计操作

  4. 掌握Tensor与Numpy的互相转换操作

  5. 掌握Tensor 的降维和增维操作

  6. 掌握Tensor 的裁剪、索引操作

  7. 掌握cuda()函数

二、实验内容

  1. 在Windows或Linux下配置PyTorch 深度学习环境

  2. 掌握一种Deep Learning开发工具

  3. 张量的创建、调整形状、加减乘除、取绝对值操作、比较、数理统计操作、与Numpy的互相转换、降维和增维、裁剪、索引,把Tensor 移到GPU上去。

三、主要实验步骤及结果

  1. 要定义一个64位浮点型Tensor,其值是矩阵:[[1,2],[3,4],[5,6]],并输出结果。

源码:

python 复制代码
import torch

x=torch.DoubleTensor([[1,2],[3,4],[5,6]])

print(x)

结果:

  1. 创建一个张量a,元素全部是1,尺寸为2×3。并打印出来。

源码:

python 复制代码
import torch

a=torch.ones(2,3)

print(a)

结果:

  1. 创建一个张量b,元素全部是0,尺寸为2×3。并打印出来。

源码:

python 复制代码
import torch

b=torch.zeros(2,3)

print(b)

结果:

4.创建一个张量c,对角线元素全部是1,尺寸为3×3。并打印出来。

源码:

python 复制代码
import torch

c=torch.eye(3,3)

print(c)

结果:

5.创建一个张量d,随机生成的浮点数的取值满足均值为0、方差为1的正太分布, 尺寸为2×3。并打印出来。

源码:

python 复制代码
import torch

d=torch.randn(2,3)

print(d)

结果:

6.创建一个张量e,长度为5的随机排列。并打印出来。

源码:

python 复制代码
import torch

e=torch.randperm(5)

print(e)

结果:

7.创建一个张量f,从1开始到7结束,步长为2。并打印出来。

源码:

python 复制代码
import torch

f=torch.arange(1,8,2)

print(f)

结果:

8.要定义一个16位整型Tensor,其值是矩阵:[[1,2],[3,4],[5,6]] ,并输出结果。

源码:

python 复制代码
import torch

x=torch.tensor([[1,2],[3,4],[5,6]],dtype=torch.int16)

print(x)

结果:

9.构造一个3x2矩阵,不初始化,并输出结果。

源码:

python 复制代码
import torch

x=torch.empty(3,2)

print(x)

结果:

10.构造一个3*2的随机初始化的矩阵,并输出结果。

源码:

python 复制代码
import torch

x=torch.rand(3,2)

print(x)

结果:

  1. 构造一个矩阵全为 0,而且数据类型是 long,并输出结果。

源码:

python 复制代码
import torch

x=torch.zeros(4,3,dtype=torch.long)

print(x)

结果:

12.构造一个数据类型是 long的全0的3*2矩阵,并输出结果。

源码:

python 复制代码
import torch

x=torch.zeros(3,2,dtype=torch.long)

print(x)

结果:

13.构造一个值为[1.5, 2]的张量,并输出结果。

源码:

python 复制代码
import torch

x=torch.tensor([1.5,2])

print(x)

结果:

  1. 根据给出的输入,得到输出,并记录。

输入:

import torch as t

c = t.Tensor(3,2)

print(c)

输出:

  1. 根据给出的输入,得到输出,并记录。

输入:

import torch as t

d = t.Tensor(3,2)

e = t.Tensor(d.size( ))

print(e)

输出:

16.以下每个函数以size=2*3为例,写出输入及输出。

  1. torch.empty(size)返回形状为size的空tensor
  2. torch.zeros(size)全部是0的tensor
  3. torch.zeros_like(input)返回跟input的tensor一个size的全零tensor
  4. torch.ones(size)全部是1的tensor
  5. torch.ones_like(input)返回跟input的tensor一样size的全tensor
  6. torch.rand(size) [0,1)内的均匀分布随机数

输入:

python 复制代码
import torch as t

size=(2,3)

input=t.tensor([[1, 2, 3], [4, 5, 6]])

a=t.empty(size)

b=t.zeros(size)

c=t.zeros_like(input)

d=t.ones(size)

e=t.ones_like(input)

f=t.rand(size)

print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f)

输出:

17.创建一个二阶张量,长度为8,元素为[0,1,2,3,4,5,6,7],将其改编成形状为2*4的张量。

源码:

python 复制代码
import torch

x=torch.tensor([0,1,2,3,4,5,6,7])

y=x.view(2,4)

print(y)

结果:

  1. a = torch.Tensor([[2,2],[1,4]])

b = torch.Tensor([[3,5],[7,4]])

实现求a与b乘积的操作,并输出结果。

源码:

python 复制代码
import torch

a=torch.tensor([[2,2],[1,4]])

b=torch.tensor([[3,5],[7,4]])

x=torch.matmul(a,b)

print(x)

结果:

19.有两个张量a = [1, 2],b = [3, 4],比较两张量大小。

源码:

python 复制代码
import torch

a=torch.tensor([1,2])

b=torch.tensor([3,4])

if torch.all(torch.gt(a,b)):

    print("a>b")

elif torch.all(torch.lt(a,b)):

    print("a<b")

else:

    print("a=b")

结果:

20.求出张量 a =([2,8])的均值。

源码:

python 复制代码
import torch

a=torch.tensor([2,8],dtype=torch.float32)

mean_a=torch.mean(a)

print(mean_a)

结果:

21.计算Tensor:[-1.2027, -1.7687, 0.4412, -1.3856]的tan( )值

源码:

python 复制代码
import torch

x=torch.tensor([-1.2027,-1.7687,0.4412,-1.3856])

y=torch.tan(x)

print(y)

结果:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.arange(4.)

print(torch.reshape(a, (2, 2)))

b = torch.tensor([[0, 1], [2, 3]])

print( torch.reshape(b, (-1,))) # 将二维张量b的形状改为一维张量,元素顺序不变

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

x = torch.randn(3, 4)

print(x)

mask = x.ge(0.5)

print(mask)

print(torch.masked_select(x, mask)) # 根据掩码(大于等于0.5)选择张量中的对应元素并打印出来

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

x = torch.randn(2, 3)

print( x)

print(torch.cat((x, x, x), 0)) # 将张量x沿着第0维方向进行拼接,即按照行方向进行拼接并打印拼接后的张量内容

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

print(torch.eye(3)) # 打印3*3的单位矩阵

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

print(torch.range(1, 4))

print(torch.range(1, 4, 0.5)) # 打印从1到4的浮点数序列的张量,步长为0.5

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(4, 4)

print(a)

b = torch.randn(4)

print(b)

print(torch.div(a, b)) #对张量a和张量b进行逐元素的除法运算 ,并打印出结果张量

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

exp = torch.arange(1., 5.)

base = 2

print(torch.pow(base, exp)) # 计算并打印2的exp中各个元素对应的次方值

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(4)

print(a)

print(torch.round(a)) # 打印张量中的各个元素四舍五入最接近的整数值

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(4)

print(a)

print( torch.sigmoid(a)) # 打印张量中每个元素通过Sigmoid激活函数转换后的结果

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.tensor([0.7, -1.2, 0., 2.3])

print(a)

print(torch.sign(a)) # 输出张量通过sign函数转换为其符号对应的数值

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(4)

print(a)

print(torch.sqrt(a)) # 输出张量中每个元素的开平方根

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(1, 3)

print(a)

print(torch.sum(a)) # 打印张量中所有元素的和

输出:

  1. 写出下面程序的结果,并写出注释语句含义。

输入:

import torch

a = torch.randn(4)

print(a)

b = torch.randn(4)

print(b)

print(torch.max(a, b)) # 比较两个张量中对应位置的元素,并返回一个新的张量,其中新的张量中为相应位置的最大值,并打印结果

输出:

35.写出以下输入的输出。

输入:

import torch

a = torch.zeros(2, 1, 2, 1, 2)

print("a =",a)

print("a.size( ) =",a.size( ))

b = torch.squeeze(a)

print("b =",b)

print("b.size( ) =",b.size( ))

c = torch.squeeze(a, 0)

print("c =",c)

print("c.size( ) =",c.size( ))

d = torch.unsqueeze(c, 1)

print("d =",d)

print("d.size( ) =",d.size( ))

输出:

  1. 查资料,说明torch.mul( ) 和 torch.mm( ) 的区别,并输出以下程序结果。

输入:

import torch

a = torch.rand(1, 2)

b = torch.rand(1, 2)

c = torch.rand(2, 3)

print(torch.mul(a, b))

print(torch.mm(a, c))

print(torch.mul(a, c))

输出:

使用torch.mul()函数计算的是两个形状相同的张量a和b的元素对应相乘的结果,但是张量a和c的形状不兼容,进行运算时会报错;使用torch.mm()计算矩阵乘法,要求第一个矩阵的列数等于第二个矩阵的行数。

四、实验总结

实验错误截图如下:

1.如下图,图中的错误为在调用pytorch的DoubleTensor函数时,不符合语法规范

2.如下图,在比较两个张量时,不能直接使用大于、小于或等于运算符。可以使用PyTorch提供的函数来进行逐元素的比较,使用torch.gt()、torch.lt()和torch.eq()函数分别进行大于、小于和等于的比较。

3.如下图,在计算张量均值时,输入的数据类型不是浮点数或复数会报错。代码中输入的张量 a 是一个整数类型的张量,我们需要将张量转换为浮点数类型,然后再计算均值。

4.如下图,报错的原因是在计算矩阵元素乘法时,两个矩阵的维度不匹配导致无法进行张量的计算。

相关推荐
浠寒AI2 小时前
智能体模式篇(上)- 深入 ReAct:LangGraph构建能自主思考与行动的 AI
人工智能·python
weixin_505154462 小时前
数字孪生在建设智慧城市中可以起到哪些作用或帮助?
大数据·人工智能·智慧城市·数字孪生·数据可视化
Best_Me072 小时前
深度学习模块缝合
人工智能·深度学习
YuTaoShao2 小时前
【论文阅读】YOLOv8在单目下视多车目标检测中的应用
人工智能·yolo·目标检测
算家计算3 小时前
字节开源代码模型——Seed-Coder 本地部署教程,模型自驱动数据筛选,让每行代码都精准落位!
人工智能·开源
伪_装3 小时前
大语言模型(LLM)面试问题集
人工智能·语言模型·自然语言处理
gs801403 小时前
Tavily 技术详解:为大模型提供实时搜索增强的利器
人工智能·rag
music&movie3 小时前
算法工程师认知水平要求总结
人工智能·算法
狂小虎4 小时前
亲测解决self.transform is not exist
python·深度学习
量子位4 小时前
苹果炮轰推理模型全是假思考!4 个游戏戳破神话,o3/DeepSeek 高难度全崩溃
人工智能·deepseek