动手学深度学习_2.1_tensor

数据操作

1 import torch
2
3 torch.manual_seed(0)
4 torch.cuda.manual_seed(0)
5 print(torch.__version__)  # 1.3.1

创建tensor

1 # 创建一个5x3的未初始化的tensor
2 x = torch.empty(5, 3)
3 print(x)
4
5 # tensor([[1.3563e-19, 1.3563e-19, 7.9717e-10],
6 #        [5.8270e-10, 5.8270e-10, 4.9153e-14],
7 #        [1.3563e-19, 1.8578e-01, 3.9157e-02],
8 #        [4.7429e+30, 2.2639e+35, 1.8971e+31],
9 #        [1.4587e-19, 1.1703e-19, 1.5637e-01]])
# 随机初始化的tensor
x = torch.rand(5, 3)
print(x)
# tensor([[0.4963, 0.7682, 0.0885],
#         [0.1320, 0.3074, 0.6341],
#         [0.4901, 0.8964, 0.4556],
#         [0.6323, 0.3489, 0.4017],
#         [0.0223, 0.1689, 0.2939]])
# 创建一个long型全0的tensor
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
# tensor([[0, 0, 0],
#         [0, 0, 0],
#         [0, 0, 0],
#         [0, 0, 0],
#         [0, 0, 0]])
# 直接数据初始化
x = torch.tensor([5.5, 3])
print(x)

# tensor([5.5000, 3.0000])
# 通过现有的tensor来创建
x = x.new_ones(5, 3, dtype=torch.float64) # 返回的tensor默认具有相同的torch.dtype和torch.device
print(x)

x = torch.randn_like(x, dtype=torch.float) # 指定新的数据类型
print(x)
# tensor([[1., 1., 1.],
#         [1., 1., 1.],
#         [1., 1., 1.],
#         [1., 1., 1.],
#         [1., 1., 1.]], dtype=torch.float64)
# tensor([[ 0.6035,  0.8110, -0.0451],
#         [ 0.8797,  1.0482, -0.0445],
#         [-0.7229,  2.8663, -0.5655],
#         [ 0.1604, -0.0254,  1.0739],
#         [ 2.2628, -0.9175, -0.2251]])
# 通过shape或size()来获取tensor形状
print(x.size())
print(x.shape)
# torch.Size([5, 3])
# torch.Size([5, 3])

运算

# 加法1:
y = torch.rand(5, 3)
print(x + y)
# 加法2:
print(torch.add(x, y)) 
# 指定输出
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
# 加法3:inplace
# adds x to y
y.add_(x)
print(y)

索引

attension:索引出来的结果与原数据共享内存,即修改一个,另一个也被修改了

y = x[0, :] # 矩阵x的第一行
y += 1
print(y)
print(x[0, :]) # 原tensor也被修改了
# 改变形状 view()
y = x.view(15)
z = x.view(-1, 5)
print(x.size(), y.size(), z.size())

attension: view()返回的新tensor与原tensor共享内存

# 若不想共享内存,先用clone创造一个副本,再用view
x_cp = x.clone().view(15)
x -= 1
print(x)
print(x_cp)
# item()函数将一个标量tensor转换为一个Python number
x = torch.randn(1)
print(x)
print(x.item())

广播机制

# 两个不同形状tensor可能会引起广播机制
x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)

tensor和NumPy相互转换

numpy()和from_numpy()产生的tensor和NumPy array实际使用的相同的内存

# tensor --> numpy
a = torch.ones(5)
b = a.numpy()
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)
# numpy --> tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(a, b)

a += 1
print(a, b)
b += 1
print(a, b)
# 直接用torch.tensor()将NumPy数组转换成tensor,该方法是将数据拷贝,返回的tensor和原来的数据不再共享内存
# 用torch.tensor()转换时不会共享内存
c = torch.tensor(a)
a += 1
print(a, c)

测试是否是GPU版的Pytorch

# 只会在GPU版本运行
if torch.cuda.is_available():
    device = torch.device("cuda")   # GPU
    y = torch.ones_like(x, device=device)  # 创建一个在GPU上的tensor
    x = x.to(device)    # 等价与x.to("cuda")
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))

原文地址:https://www.cnblogs.com/harbin-ho/p/11961947.html

时间: 2024-08-02 16:10:23

动手学深度学习_2.1_tensor的相关文章

动手学深度学习_2.2_autograd

Tensor import torch x = torch.ones(2, 2, requires_grad=True) # 将其属性.requires_grad设置为True,它将开始追踪(track)在其上的所有操作.完成计算后,可以调用.backward()来完成所有梯度计算 print(x) print(x.grad_fn) # 每个Tensor都有一个.grad_fn属性,该属性即创建该Tensor的Function(除非用户创建的Tensors时设置了grad_fn=None) #

分享《动手学深度学习》高清PDF+视频教程-李沐著

下载:https://pan.baidu.com/s/10EKdEe-vjp9i97xP1FWuGA 更多资料学习:http://blog.51cto.com/14087171 由 MXNet 创始人李沐大神.Aston Zhang 等人所著的交互式书籍<动手学深度学习>推出了在线预览版,面向在校学生.工程师和研究人员,旨在帮助读者从入门到深入.动手学习深度学习,即使是零基础的读者也完全适用. 在本书上线之前,李沐等人还推出了<动手学深度学习>系列视频,这门课程的第一季已经于今年

分享《动手学深度学习(李沐等著)》PDF+源代码+《神经网络与深度学习(吴岸城)著》PDF

下载:https://pan.baidu.com/s/11O2m_uxSWJGbkXHF2Zh94w 更多资料:https://pan.baidu.com/s/1g4hv05UZ_w92uh9NNNkCaA <动手学深度学习(李沐等著)> 中文PDF,530页,带书签目录,文字可以复制粘贴.配套源代码. <神经网络与深度学习 (吴岸城)著>中文PDF,233页,带书签目录. 如图: 原文地址:https://www.cnblogs.com/limujun/p/10054478.ht

对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中可以大获全胜?人工智终将会取代人类智慧吗? <神经网络与深度学习>是一本介绍神经网络和深度学习算法基本原理及相关实例的书籍,它不是教科书,作者已尽量把公式减少到最少,以适应绝大部分人的阅读基础和知识储备.<神经网络与深度学习>涵盖了神经网络的研究历史.基础原理.深度学习中的自编码器.深

【动手学深度学习】Jupyter notebook中 import mxnet出错

问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活环境是能够运行代码的前提. 解决方法: 在d2l-zh目录运行conda activate gluon命令,然后再打开jupyter notebook,则可以正常导入mxnet模块. 参考 1. d2l-zh-doc; 2. [动手学深度学习]中Jupyter notebook中 import mx

小白学习之pytorch框架(2)-动手学深度学习(begin)

在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比较执着,想学pytorch,好,有个大神来了,把<动手学深度学习>整本书用pytorch代码重现了,其GitHub网址为:https://github.com/ShusenTang/Dive-into-DL-PyTorch   原书GitHub网址为:https://github.com/d2l-

DataWhale 动手学深度学习PyTorch版-task3+4+5:文本预处理;语言模型;循环神经网络基础

课程引用自伯禹平台:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV <动手学深度学习>官方网址:http://zh.gluon.ai/ ——面向中文读者的能运行.可讨论的深度学习教科书. 第二次打卡: Task03: 过拟合.欠拟合及其解决方案:梯度消失.梯度爆炸:循环神经网络进阶 Task04:机器翻译及相关技术:注意力机制与Seq2seq模型:Transformer Task05:卷积神经网络基础:leNet:卷积神经网络进阶 有

动手学深度学习第一课:从上手到多类分类-Autograd

使用autograd来自动求导 在机器学习中,我们通常使用梯度下降来更新模型参数从而求解.损失函数关于模型参数的梯度指向一个可以降低损失函数值的方向,我们不断地沿着梯度的方向更新模型从而最小化损失函数.虽然梯度计算比较直观,但对于复杂的模型,例如多达数十层的神经网络,手动计算梯度非常困难. 为此MXNet提供autograd包来自动化求导过程.虽然大部分的深度学习框架要求编译计算图来自动求导,mxnet.autograd可以对正常的命令式程序进行求导,它每次在后端实时创建计算图从而可以立即得到梯

动手学深度学习 3-5 Others

其他问题 1. 模型选择.欠拟合和过拟合 1.1 训练误差和泛化误差 1.2 模型选择 1.2.1 验证数据集 1.2.2 \(K\) 折交叉验证 由于验证数据集不参与模型训练,当训练数据不够用时,预留大量的验证数据显得太奢侈.一种改善的方法是\(K\)折交叉验证(\(K\)-fold cross-validation).在\(K\)折交叉验证中,我们把原始训练数据集分割成\(K\)个不重合的子数据集,然后我们做\(K\)次模型训练和验证.每一次,我们使用一个子数据集验证模型,并使用其他\(K-