pytorch笔记

中文版官方教程:http://pytorch123.com/

1.一篇总结很好的文章


pytorch学习:https://blog.csdn.net/lantuxin/article/details/87709344

2.查看类型、大小

实例:

import torch

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

print(a)

print(a.type())#查看类型

print(type(a))#查看类型

#size等价于shape

print(a.shape)#查看大小

print(a.size())#查看大小

打印结果:

tensor([1., 2., 3.])

torch.FloatTensor

<class 'torch.Tensor'>

torch.Size([3])

torch.Size([3])

3.转换Torch tensor到numpy

实例:

import numpy as np

import torch

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

print(a)

print(a.type())#查看类型

b=a.numpy()

print(b)

print(type(b))

打印结果:

tensor([1., 2., 3.])

torch.FloatTensor

[1. 2. 3.]

<class 'numpy.ndarray'>

4.转换numpy到Torch tensor

实例:

import numpy as np

import torch

c=np.array([[1,2]])

print(c)

a=torch.from_numpy(c)

print(a)

print(torch.tensor(c))

打印结果:

[[1 2]]

tensor([[1, 2]], dtype=torch.int32)

tensor([[1, 2]], dtype=torch.int32)

5.转置

实例:

import torch

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

print(c)

print(c.t())

打印结果:

tensor([[1, 2]])

tensor([[1],

        [2]])

6.dot()

错误1:RuntimeError: dot: Expected 1-D argument self, but got 2-D

    新版本中(>=0.3.0), 关于 tensor.dot() 有了新的改变, 它只能针对于一维的数组. 所以上面的有所改变.输入1维数组就ok

实例:

import torch

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

print(a)

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

print(b)

c=torch.dot(a.flatten(),b.flatten())

print(c)

打印结果:

tensor([[1, 2, 3],

        [0, 3, 6]])

tensor([[2, 1, 2],

        [1, 2, 3]])

tensor(34)

7.矩阵乘法:@、mm

实例:

import torch

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

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

print(a@b.t())

print(torch.mm(a,b.t()))

打印结果:

tensor([[10, 14],

        [15, 24]])

tensor([[10, 14],

        [15, 24]])

8.where

实例:

import torch

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

a=torch.where(a>0,torch.tensor(0),torch.tensor(-1))

print(a)

打印结果:

tensor([[ 0, 0, 0],

        [-1,  0,  0]])

9.查看系统是否支持CHDA

实例:

import torch

print(torch.cuda.is_available())

打印结果:

True(我自己电脑上装有GPU显卡)

10.使用GPU和CPU计算

很好的原文:https://blog.csdn.net/qq_21578849/article/details/85240797

(1)模型转为cuda

gpus = [0] #使用哪几个GPU进行训练,这里选择0号GPU

cuda_gpu = torch.cuda.is_available()  #判断GPU是否存在可用

net = Net(12288, 25, 16, 6)

if(cuda_gpu):

    net = torch.nn.DataParallel(net, device_ids=gpus).cuda()  #将模型转为cuda类型

(2)数据转化为cuda

(minibatchX, minibatchY) = minibatch

minibatchX = minibatchX.astype(np.float32).T

minibatchY = minibatchY.astype(np.float32).T

if(cuda_gpu):

    b_x = Variable(torch.from_numpy(minibatchX).cuda())    #将数据转为cuda类型

    b_y = Variable(torch.from_numpy(minibatchY).cuda())

else:

    b_x = Variable(torch.from_numpy(minibatchX))

    b_y = Variable(torch.from_numpy(minibatchY))

(3)输出数据去cuda,转为numpy

correct_prediction = sum(torch.max(output, 1)[1].data.squeeze() == torch.max(b_y, 1)[1].data.squeeze())

if(cuda_gpu):

    correct_prediction = correct_prediction.cpu().numpy()  #.cpu将cuda转为tensor类型,.numpy将tensor转为numpy类型

else:

    correct_prediction = correct_prediction.numpy()

(4)附加

实例:

import torch

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

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

print(torch.cuda.is_available())

if torch.cuda.is_available():

a=a.cuda()

b=b.cuda()

else:

a=a.cpu()

b=b.cpu()

print(a+b)#GPU

打印结果:

True(我自己电脑上有GPU)

tensor([[3, 3, 5],

        [1, 5, 9]], device='cuda:0')

11.一个简单的梯度下降实例

(1)~(4):预备工作;(5):小案例

(1)zip

    使用zip()函数来可以把列表合并,并创建一个元组对的列表

    好文链接:https://www.cnblogs.com/wdz1226/p/10181354.html

附加实例:

x=[1,2,3]

y=[4,5,6]

print(zip(x,y))

for i in zip(x,y):

print(i)

打印结果:

<zip object at 0x000002A45F847888>

(1, 4)

(2, 5)

(3, 6)

(2)grad_fn

原文链接:https://blog.csdn.net/duanmuji/article/details/85217338

Varibale包含三个属性:

data:存储了Tensor,是本体的数据

grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致

grad_fn:指向Function对象,用于反向传播的梯度计算之用

(3)mean

原文链接:https://blog.csdn.net/sinat_40624829/article/details/91127373

torch.mean(input) 输出input 各个元素的的均值,不指定任何参数就是所有元素的算术平均值,指定参数可以计算每一行或者 每一列的算术平均数

(4)backward()

pytorch中 backward 机制理解:https://blog.csdn.net/baidu_36161077/article/details/81435627

(5)小案例

a)案例1

import torch

from torch.autogradimport Variable

x=Variable(torch.tensor([1.,2,3]),requires_grad=True)#使用Variable()封装变量

z=x+3

y=2*z

print(z)

print(y)

print(y.grad_fn)#每一步的操作。pyThorch根据每一步的操作计算导数。

#backward只能被应用在一个标量上,也就是一个一维tensor,或者传入跟变量相关的梯度。

y=y.mean()#变成标量。

y.backward()

#dx=1/3*2

print(x.grad)#打印导数。对标量求导。

print(x.data)

b=torch.tensor([2.],requires_grad=True)#实际中,在后期版本,将Variable和tensor的东西合并了,不需要使用Variable()封装变量。

b.backward()

print(b.grad )

打印结果:

tensor([4., 5., 6.], grad_fn=<AddBackward0>)

tensor([ 8., 10., 12.], grad_fn=<MulBackward0>)

<MulBackward0 object at 0x0000024AAC36B080>

tensor([0.6667, 0.6667, 0.6667])

tensor([1., 2., 3.])

tensor([1.])

b)案例2

import random

_x=[i/100 for i in range(100)]#i/100:归一化

print(_x)

_y=[3*e+4 for e in _x]

print(_y)

#随机给w、b

w=random.random()

b=random.random()

for i in range(100):

    for x,yin zip(_x,_y):

    #前向传播

        z=w*x+b

        o=2*z-y

        loss=o**2

        #反向求导

        dw=-2*o*x

        db=-2*o

#梯度更新

        w=w+0.1*dw#0.1:步长、学习率

        b=b+0.1*db

print(w,b,loss)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342