(pytorch-深度学习系列)pytorch数据操作

pytorch数据操作

基本数据操作,都详细注释了,如下:

import torch#5x3的未初始化的Tensor
x = torch.empty(5, 3)
print("5x3的未初始化的Tensor:")
print(x)
print("******************************")#5x3的随机初始化的Tensor:
x = torch.rand(5, 3)
print("5x3的随机初始化的Tensor:")
print(x)
print("******************************")#5x3的long型全0的Tensor:
x = torch.zeros(5, 3, dtype=torch.long)
print("5x3的long型全0的Tensor:")
print(x)
print("******************************")#根据源数据创建
x = [5, 4, 3]
x = torch.tensor(x, dtype=torch.float64)
print("根据源数据创建tensor:")
print(x)
print("******************************")#返回的tensor默认具有相同的torch.dtype和torch.device
#建立一个tensor
x = x.new_ones(5, 3, dtype=torch.float64)  
print("建立的tensor")
print(x)
print("******************************")#通过对已有的tensor 指定新的数据类型 创建tensor
x = torch.randn_like(x, dtype=torch.float)
print("通过对已有的tensor 指定新的数据类型 创建tensor:")
print(x) 
print("******************************")#通过shape或者size()来获取Tensor的形状:
print("通过shape或者size()来获取Tensor的形状:")
print(x.size())
print(x.shape)
print("******************************")#tensor加法:
y = torch.rand(5, 3)
print(x + y)
print("******************************")#add函数实现tensor相加
print(torch.add(x, y))
print("******************************")#add函数指定输出相加
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
print("******************************")#使用内联函数实现加发
y.add_(x)
print(y)
#PyTorch操作inplace版本都有后缀_, 例如x.copy_(y), x.t_()
print("******************************")#类似numpy的索引方式
y=x[0,:]
y += 2
print(y)
print("修改了y,那么原tensor也会被修改")
print(x[0, :])
print("******************************")#改变形状 view函数
y = x.view(15)
z = x.view(-1, 5)  # -1所指的维度可以根据其他维度的值推出来
print(x.size(), y.size(), z.size())
print("******************************")#view()返回的新Tensor与源Tensor虽然可能有不同的size,但是是共享data的,即更改一个,另一个也会变化
x += 1
print(x)
print(y) # 也加了1
print("******************************")#使用clone函数获得一个真正的数据副本3.
x_clone = x.clone().view(15)
x += 1
print(x)
print(x_clone)
print("******************************")
#使用clone还有一个好处是会被记录在计算图中,即梯度回传到副本时也会传到源Tensor。#另外一个常用的函数就是item(), 它可以将一个标量Tensor转换成一个Python number:
x = torch.randn(1)
print(x)
print(x.item())
print("******************************")#形状不同的tensor进行计算,会触发广播机制
x = torch.arange(1, 3).view(1, 2)
y = torch.arange(0, 3).view(3, 1)
print(x)
print(y)
print(x + y)
print(torch.add(x, y))
#print(x.add_(y))
#由于x和y分别是1行2列和3行1列的矩阵,如果要计算x + y,那么x中第一行的2个元素被广播(复制)到了第二行和第三行,而y中第一列的3个元素被广播(复制)到了第二列。如此,就可以对2个3行2列的矩阵按元素相加。
print("******************************")#索引操作与clone操作不同,不会开辟新的内存,但是运算操作会开辟新的内存
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
y[:] = y + x
print(id(y) == id_before) # True
print("未开辟新的内存")x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
y = y + x
print(id(y) == id_before) # False 
print("开辟了新的内存")print("使用 add函数指定输出也可以避免开辟内存:")
x = torch.tensor([1, 2])
y = torch.tensor([3, 4])
id_before = id(y)
torch.add(x, y, out=y) # y += x, y.add_(x)
print(id(y) == id_before) # True
print("******************************")#Tensor转NumPy:tensor.numpy()
a = torch.ones(5)
b = a.numpy()
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)#torch.from_numpy
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)这样会开辟新的内存
c = torch.tensor(a)
a += 1
print(a, c)#测试gpu环境
# 以下代码只有在PyTorch GPU版本上才会执行
if torch.cuda.is_available():device = torch.device("cuda")          # GPUy = torch.ones_like(x, device=device)  # 直接创建一个在GPU上的Tensorx = x.to(device)                       # 等价于 .to("cuda")z = x + yprint(z)print(z.to("cpu", torch.double))       # to()还可以同时更改数据类型

输出结果如下:

Microsoft Windows [版本 10.0.18363.1082]
(c) 2019 Microsoft Corporation。保留所有权利。C:\Users\20626>d:D:\>cd workspaceD:\workspace>cd "python Workspace"D:\workspace\python Workspace>cd deeplearning-pytorchD:\workspace\python Workspace\deeplearning-pytorch>activate pytorch_gpuD:\workspace\python Workspace\deeplearning-pytorch>conda.bat activate pytorch_gpu(pytorch_gpu) D:\workspace\python Workspace\deeplearning-pytorch>python chapter-1.py
5x3的未初始化的Tensor:
tensor([[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])
******************************
5x3的随机初始化的Tensor:
tensor([[0.7356, 0.2419, 0.0771],[0.2658, 0.9888, 0.8363],[0.7294, 0.4150, 0.9157],[0.8824, 0.1682, 0.8827],[0.7691, 0.0690, 0.8040]])
******************************
5x3的long型全0的Tensor:
tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])
******************************
根据源数据创建tensor:
tensor([5., 4., 3.], dtype=torch.float64)
******************************
建立的tensor
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], dtype=torch.float64)
******************************
通过对已有的tensor 指定新的数据类型 创建tensor:
tensor([[ 0.1654, -0.1937,  1.2233],[-0.4828, -0.8176, -0.3672],[ 0.5762,  0.6457, -0.0862],[ 0.9082, -0.3934, -0.3169],[ 0.1841,  0.8648,  1.1849]])
******************************
通过shape或者size()来获取Tensor的形状:
torch.Size([5, 3])
torch.Size([5, 3])
******************************
tensor([[ 1.0382e+00, -4.8804e-04,  2.1988e+00],[-2.5249e-01, -1.7922e-01,  4.7531e-01],[ 1.1131e+00,  7.3895e-01,  5.4079e-01],[ 1.8360e+00, -3.9927e-02, -1.0457e-01],[ 4.7496e-01,  1.6555e+00,  1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04,  2.1988e+00],[-2.5249e-01, -1.7922e-01,  4.7531e-01],[ 1.1131e+00,  7.3895e-01,  5.4079e-01],[ 1.8360e+00, -3.9927e-02, -1.0457e-01],[ 4.7496e-01,  1.6555e+00,  1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04,  2.1988e+00],[-2.5249e-01, -1.7922e-01,  4.7531e-01],[ 1.1131e+00,  7.3895e-01,  5.4079e-01],[ 1.8360e+00, -3.9927e-02, -1.0457e-01],[ 4.7496e-01,  1.6555e+00,  1.2281e+00]])
******************************
tensor([[ 1.0382e+00, -4.8804e-04,  2.1988e+00],[-2.5249e-01, -1.7922e-01,  4.7531e-01],[ 1.1131e+00,  7.3895e-01,  5.4079e-01],[ 1.8360e+00, -3.9927e-02, -1.0457e-01],[ 4.7496e-01,  1.6555e+00,  1.2281e+00]])
******************************
tensor([2.1654, 1.8063, 3.2233])
修改了y,那么原tensor也会被修改
tensor([2.1654, 1.8063, 3.2233])
******************************
torch.Size([5, 3]) torch.Size([15]) torch.Size([3, 5])
******************************
tensor([[3.1654, 2.8063, 4.2233],[0.5172, 0.1824, 0.6328],[1.5762, 1.6457, 0.9138],[1.9082, 0.6066, 0.6831],[1.1841, 1.8648, 2.1849]])
tensor([3.1654, 2.8063, 4.2233, 0.5172, 0.1824, 0.6328, 1.5762, 1.6457, 0.9138,1.9082, 0.6066, 0.6831, 1.1841, 1.8648, 2.1849])
******************************
tensor([[4.1654, 3.8063, 5.2233],[1.5172, 1.1824, 1.6328],[2.5762, 2.6457, 1.9138],[2.9082, 1.6066, 1.6831],[2.1841, 2.8648, 3.1849]])
tensor([3.1654, 2.8063, 4.2233, 0.5172, 0.1824, 0.6328, 1.5762, 1.6457, 0.9138,1.9082, 0.6066, 0.6831, 1.1841, 1.8648, 2.1849])
******************************
tensor([-0.5415])
-0.5414556860923767
******************************
tensor([[1, 2]])
tensor([[0],[1],[2]])
tensor([[1, 2],[2, 3],[3, 4]])
tensor([[1, 2],[2, 3],[3, 4]])
******************************
True
未开辟新的内存
False
开辟了新的内存
使用 add函数指定输出也可以避免开辟内存:
True
******************************
tensor([1., 1., 1., 1., 1.]) [1. 1. 1. 1. 1.]
tensor([2., 2., 2., 2., 2.]) [2. 2. 2. 2. 2.]
tensor([3., 3., 3., 3., 3.]) [3. 3. 3. 3. 3.]
[1. 1. 1. 1. 1.] tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
[2. 2. 2. 2. 2.] tensor([2., 2., 2., 2., 2.], dtype=torch.float64)
[3. 3. 3. 3. 3.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
[4. 4. 4. 4. 4.] tensor([3., 3., 3., 3., 3.], dtype=torch.float64)
tensor([2, 3], device='cuda:0')
tensor([2., 3.], dtype=torch.float64)(pytorch_gpu) D:\workspace\python Workspace\deeplearning-pytorch>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(pytorch-深度学习系列)pytorch中backwards()函数对梯度的操作

backwards()函数对梯度的操作 对于一个新的tensor来说,梯度是空的;但当对这个tensor进行运算操作后,他就会拥有一个梯度: x torch.ones(2, 2, requires_gradTrue) print(x) print(x.grad_fn)y x 2 print(y) print(y.grad_fn)…

(pytorch-深度学习系列)pytorch实现线性回归

pytorch实现线性回归 1. 实现线性回归前的准备 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销售额等连续值的问题。 与回归问题不同,分类问题中模型的最终输出是一个离散值。我们所说的图…

(pytorch-深度学习系列)pytorch线性回归的便捷实现

pytorch线性回归的便捷实现 继上一篇blog,使用更加简洁的方法实现线性回归 生成数据集: num_inputs 2 num_examples 1000 true_w [2, -3.4] true_b 4.2 features torch.tensor(np.random.normal(0, 1, (num_examples, num_inputs)), dtypetorch.f…

(pytorch-深度学习系列)pytorch实现对Fashion-MNIST数据集进行图像分类

pytorch实现对Fashion-MNIST数据集进行图像分类 导入所需模块: import torch import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import time import sys对数据集的操作(读取数据集)&#…

(pytorch-深度学习系列)使用softmax回归实现对Fashion-MNIST数据集进行分类-学习笔记

使用softmax回归实现对Fashion-MNIST数据集进行分类 import torch from torch import nn from torch.nn import init import numpy as np import sys读取数据集: mnist_train torchvision.datasets.FashionMNIST(root~/Datasets/FashionMNIST, trainTrue, downlo…

(pytorch-深度学习系列)pytorch实现多层感知机(手动定义模型)对Fashion-MNIST数据集进行分类-学习笔记

pytorch实现多层感知机对Fashion-MNIST数据集进行分类(手动定义模型) 多层感知机: 多层感知机在单层神经网络的基础上引入了一到多个隐藏层(hidden layer)。隐藏层位于输入层和输出层之间。 输入和输出个数分别为4和…

(pytorch-深度学习系列)pytorch实现多层感知机(自动定义模型)对Fashion-MNIST数据集进行分类-学习笔记

pytorch实现多层感知机(自动定义模型)对Fashion-MNIST数据集进行分类 导入模块: import torch from torch import nn from torch.nn import init import numpy as np定义数据集: class FlattenLayer(nn.Module): # 定义一个ten…

(pytorch-深度学习系列)pytorch避免过拟合-权重衰减的实现-学习笔记

pytorch避免过拟合-权重衰减的实现 首先学习基本的概念背景 L0范数是指向量中非0的元素的个数;(L0范数难优化求解) L1范数是指向量中各个元素绝对值之和; L2范数是指向量各元素的平方和然后求平方根。 权重衰减等价于 L2范数正则化(regular…

(pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记

pytorch避免过拟合-dropout丢弃法的实现 对于一个单隐藏层的多层感知机,其中输入个数为4,隐藏单元个数为5,且隐藏单元hih_ihi​(i1,…,5i1, \ldots, 5i1,…,5)的计算表达式为: hiϕ(x1w1ix2w2ix3w3ix4w4ib…

(pytorch-深度学习系列)正向传播与反向传播-学习笔记

正向传播与反向传播 1. 正向传播 正向传播是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。 假设输入是一个特征为x∈Rd\boldsymbol{x} \in \mathbb{R}^dx∈Rd的样本,且不考虑偏差项&#x…

(pytorch-深度学习系列)简单实现kaggle房价预测-学习笔记

实现kaggle房价预测 导入所需模块: %matplotlib inline import torch import torch.nn as nn import numpy as np import pandas as pdprint(torch.__version__) torch.set_default_tensor_type(torch.FloatTensor)读取数据集: (具体以自己…

(pytorch-深度学习系列)ResNet残差网络的理解-学习笔记

ResNet残差网络的理解 ResNet伴随文章 Deep Residual Learning for Image Recognition 诞生,该文章是MSRA何凯明团队在2015年ImageNet上使用的网络,在当年的classification、detection等比赛中,ResNet均获了第一名,这也导致了Res…

(pytorch-深度学习系列)pytorch构造深度学习模型-学习笔记

pytorch构造深度学习模型 1. 通过继承module类的方式来构造模型 Module类是nn模块里提供的一个模型构造类,是所有神经网络模块的基类。 可以继承基类并重构 __init()__函数和forward()forward()forward()函数的方式来构造模型。 以下是一个构造一个模型的例子&am…

(pytorch-深度学习系列)模型参数的初始化与访问操作-学习笔记

模型参数的初始化与访问操作 学习 如何初始化以及访问模型参数,以及如何在多层之间共享模型参数 首先定义一个含有单个隐藏层的多层感知机,使用默认方式初始化该模型的参数,并且进行一次前向计算: import torch from torch impo…

(pytorch-深度学习系列)pytorch实现自定义网络层,并自设定前向传播路径-学习笔记

pytorch实现自定义网络层,并自设定前向传播路径-学习笔记 1. 不包含模型参数的自定义网络层 首先我们自定义一个网络层, 定义一个网络层,使其不包含模型参数,并在forward()函数中进行运算: import torch from torc…

(pytorch-深度学习系列)读取和存储数据-学习笔记

读取和存储数据 我们可以使用pt文件存储Tensor数据: import torch from torch import nnx torch.ones(3) torch.save(x, x.pt)这样我们就将数据存储在名为x.pt的文件中了 我们可以从文件中将该数据读入内存: x2 torch.load(x.pt) print(x2)还可以存…

(pytorch-深度学习系列)pytorch使用GPU计算-学习笔记

pytorch使用GPU计算 在之前的blog中早已经讲过如何配置pytorch的GPU加速环境 查看GPU加速是否可用: import torch from torch import nnprint(torch.cuda.is_available()) # true 查看GPU是否可用print(torch.cuda.device_count()) #GPU数量, 1torch.…

(pytorch-深度学习系列)CNN二维卷积层-学习笔记

二维卷积层 在二维互相关运算中,卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应…

(pytorch-深度学习系列)卷积神经网络中的填充(padding)和步幅(stride)

卷积神经网络中的填充(padding)和步幅(stride) 之前写过一篇blog,描述CNN网络层的输入和输入尺寸的计算关系,但是并没有描述的很全面,这里全面描述了影响输出尺寸的两个超参数padding和stride,查阅了相关资料,编码理解…

(pytorch-深度学习系列)CNN的多输入通道和多输出通道

CNN的多输入通道和多输出通道 之前的输入都视为二维数组,但是真实数据往往具有更高的维度,彩色图像有RGB三个颜色通道,那么这个图像(高为h,宽为w)可以表示为3∗h∗w3*h*w3∗h∗w的多维数组,一般…