Pytorch是基于python的科学计算包,为两类受众提供服务

  • 作为Numpy的替换,让你可以使用GPU的算力
  • 作为一个深度学习计算平台提供最大的计算灵活性与速度

开始体验pytorch的基础功能

Tensor:

tensor与Numpy的高维数据概念类似,可以在GPU上进行计算

import torch

建立一个5*3的未初始化的tensor

x=torch.empty(5,3)
print(x)

out:
tensor(1.00000e-07 *
       [[-0.0000,  0.0000,  0.0000],
[ 0.0000, 9.4713, 0.0000],
[ 9.4201, 0.0000, 0.0000],
[ 0.0000, -0.0000, 0.0000],
[-0.0000, 0.0000, -0.0000]])

建立一个随机初始化的tensor

x=torch.rand(5,3)
print(x)

out:

tensor([[ 0.7816, 0.8146, 0.9424],

[ 0.0888, 0.5530, 0.9181],
[ 0.8362, 0.1937, 0.0084],
[ 0.2004, 0.2818, 0.8674],
[ 0.6464, 0.4978, 0.8994]])

建立一个tensor用0填充并使用long类型

x=torch.zeros(5,3,dtype=torch.long)
print(x)

out:

tensor([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0]])

直接从数据创建tensor

torch.tensor([5.5,3])
print(x)

out:

tensor([ 5.5000, 3.0000])

我们也可以基于现有的tensor建立新的tensor,这样新的tensor会复用之前的属性,比如类型等

x=torch.new_ones(5,3,dtype=torch.double)
print(x)

x=torch.randn_like(x,dtype=torch.float)
print(x)

out:

tensor([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]], dtype=torch.float64)

tensor([[ 0.3648, 0.5067, 1.1720],
[-1.3361, 0.9999, 0.4133],
[-0.2699, 0.7601, -1.1138],
[-1.8955, -0.4079, 1.0827],
[-0.0156, 0.3810, 1.2646]])

获得tensor尺寸

print(x.size())

out:

torch.Size([5, 3])

运算

y=torch.rand(5,3)
#torch.add(x,y)
print(x+y)

out:

tensor([[ 1.0363, 0.8469, 1.1758],
[ 1.5991, 0.8271, 1.2000],
[ 0.9036, 1.1352, 1.4293],
[ 1.3676, 0.8430, 0.7633],
[ 1.3159, 1.4635, 1.9067]])

提供输出变量作为参数

result=torch.empty(5,3)
torch.add(x,y,out=result)
print(result) out:
tensor([[ 1.0363, 0.8469, 1.1758],
[ 1.5991, 0.8271, 1.2000],
[ 0.9036, 1.1352, 1.4293],
[ 1.3676, 0.8430, 0.7633],
[ 1.3159, 1.4635, 1.9067]])

同时提供了内建函数,内建函数会影响变量本身的值,如x.copy_(y),x.t_()会影响x的值

y.add_(x)
print(y) out:
tensor([[ 1.0363, 0.8469, 1.1758],
[ 1.5991, 0.8271, 1.2000],
[ 0.9036, 1.1352, 1.4293],
[ 1.3676, 0.8430, 0.7633],
[ 1.3159, 1.4635, 1.9067]])

你可以使用标准Numpy的索引的所有写法!!

print(x[:,1])
out:
tensor([ 0.2492, 0.7801, 0.5992, 0.8164, 0.6371])

调整形状:如果你想重新调整tensor的维度,可以使用tensor.view

x=torch.randn(4,4)
y=torch.view(16)
z=torch.view(-1,8)
print(x.size(),y.size(),z.size())

out:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

如果你有一个只包含一个元素的tensor,可以使用.item()来得到python形式的值

x=torch.randn(1)
print(x)
print(x.item())
out:
tensor([ 0.4210])
0.4210202693939209

Numpy桥

torch的tensor与Numpy数组之间的转换是很轻松的

torch的tensor与Numpy的数组共享同一块内存空间,改变一者会影响另一个

将torch tensor转换为Numpy数组:

a=torch.ones(5)
print(a)
b=a.numpy()
print(b) out:
tensor([ 1., 1., 1., 1., 1.])

[1. 1. 1. 1. 1.]

观察numpy数组b的变化

a.add_(1)
print(a)
print(b) out:
tensor([ 2., 2., 2., 2., 2.])

[2. 2. 2. 2. 2.]

 

将Numpy数组转换为torch tensor:

观察numpy数组如何引起torch tensor的变化

import numpy as np
a=no.ones(5)
b=torch.from_numpy(a)
np.add(a,1,out=a)
print(a)
print(b)

out:
array([2., 2., 2., 2., 2.])
tensor([ 2., 2., 2., 2., 2.], dtype=torch.float64)

除了CharTensor外CPU上的tensor都可以转换为numpy并返回

CUDA Tensor

if torch.cuda.is_available():
device=torch.device("cuda") #一个CUDA设备目标
y=torch.ones_like(x,device=device) #直接在GPU上建立变量
x=x.to(device)
z=x+y
print(z)
print(z.to("cpu",torch.double)) out:
tensor([[ 1.4325, -0.1697, 2.2435],
[ 0.6878, 0.9155, 1.4876]], device='cuda:0')

tensor([[ 1.4325, -0.1697, 2.2435],
[ 0.6878, 0.9155, 1.4876]], dtype=torch.float64)

什么是pytorch?的更多相关文章

  1. Ubutnu16.04安装pytorch

    1.下载Anaconda3 首先需要去Anaconda官网下载最新版本Anaconda3(https://www.continuum.io/downloads),我下载是是带有python3.6的An ...

  2. 解决运行pytorch程序多线程问题

    当我使用pycharm运行  (https://github.com/Joyce94/cnn-text-classification-pytorch )  pytorch程序的时候,在Linux服务器 ...

  3. 基于pytorch实现word2vec

    一.介绍 word2vec是Google于2013年推出的开源的获取词向量word2vec的工具包.它包括了一组用于word embedding的模型,这些模型通常都是用浅层(两层)神经网络训练词向量 ...

  4. 基于pytorch的CNN、LSTM神经网络模型调参小结

    (Demo) 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN.LSTM.BiLSTM.GRU以及CNN与LSTM.BiLSTM的结合还有多层多通道CNN.LSTM. ...

  5. pytorch实现VAE

    一.VAE的具体结构 二.VAE的pytorch实现 1加载并规范化MNIST import相关类: from __future__ import print_function import argp ...

  6. PyTorch教程之Training a classifier

    我们已经了解了如何定义神经网络,计算损失并对网络的权重进行更新. 接下来的问题就是: 一.What about data? 通常处理图像.文本.音频或视频数据时,可以使用标准的python包将数据加载 ...

  7. PyTorch教程之Neural Networks

    我们可以通过torch.nn package构建神经网络. 现在我们已经了解了autograd,nn基于autograd来定义模型并对他们有所区分. 一个 nn.Module模块由如下部分构成:若干层 ...

  8. PyTorch教程之Autograd

    在PyTorch中,autograd是所有神经网络的核心内容,为Tensor所有操作提供自动求导方法. 它是一个按运行方式定义的框架,这意味着backprop是由代码的运行方式定义的. 一.Varia ...

  9. Linux安装pytorch的具体过程以及其中出现问题的解决办法

    1.安装Anaconda 安装步骤参考了官网的说明:https://docs.anaconda.com/anaconda/install/linux.html 具体步骤如下: 首先,在官网下载地址 h ...

  10. Highway Networks Pytorch

    导读 本文讨论了深层神经网络训练困难的原因以及如何使用Highway Networks去解决深层神经网络训练的困难,并且在pytorch上实现了Highway Networks. 一 .Highway ...

随机推荐

  1. 一种O(n)时间复杂度的计数排序算法和Top N热词算法

    排序算法是研究非常广泛且超级经典的算法,主流排序算法的时间复杂度基本都在O(nlogn). 今天就介绍一种以hash表为基础的,时间复杂度能够达到O(n)的排序算法--计数排序: 同时基于它的思想,完 ...

  2. 【Azure 应用服务】Azure Function 启用 Managed Identity后, Powershell Funciton出现 ERROR: ManagedIdentityCredential authentication failed

    问题描述 编写Powershell Function,登录到China Azure并获取Azure AD User信息,但是发现遇见了 [Error] ERROR: ManagedIdentityCr ...

  3. MySQL备份迁移之mydumper

    简介 mydumper 是一款开源的 MySQL 逻辑备份工具,主要由 C 语言编写.与 MySQL 自带的 mysqldump 类似,但是 mydumper 更快更高效. mydumper 的一些优 ...

  4. liunx对磁盘进行配额限制

    说明,我们给你一个分区进行磁盘配额进行限制 1.首先我们要进行那个分区进行限制,通过修改配置文件加上uquota ,然后再重启一下系统 二.quota 命令用于管理设备的磁盘容量配额,语法格式为 xf ...

  5. 攻防世界-MISC:2017_Dating_in_Singapore

    这是MISC高手进阶区的题目:题目如下: 点击下载附件一,得到一张pdf图片,除此之外就只有题目给的字符串了,不知道是什么意思(查看了一下WP)原来每一串通过"-"隔开的字符串代表 ...

  6. PHP 运行 mkdir() Permission Denied 的原因

    使用lamp,在上传文件时,PHP执行 mkdir($path) ,  出现没有权限的错误. 解决: 本次使用的时yii框架,所以首先确保 是apache的用户对web目录有权限,然后再给此用户加 r ...

  7. .NET混合开发解决方案6 检测是否已安装合适的WebView2运行时

    系列目录     [已更新最新开发文章,点击查看详细] 长青版WebView2运行时将作为Windows 11操作系统的一部分包含在内.但是在Windows 11之前(Win10.Win8.1.Win ...

  8. 版本控制之git

    1.Git的介绍 Git 是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发.Git ...

  9. sklearn机器学习实战-简单线性回归

    记录下学习使用sklearn,将使用sklearn实现机器学习大部分内容 基于scikit-learn机器学习(第2版)这本书,和scikit-learn中文社区 简单线性回归 首先,最简单的线性回归 ...

  10. springMvc和Hibernate集成实现用户添加

    源码:http://pan.baidu.com/s/1i4xVLE9(百度云) 步骤:一.创建数据库(mysql) 二.导入相应jar包(注意不同数据库jdbc.jar包)配置web.xml.spri ...