pytorch筆記

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

1.一篇總結(jié)很好的文章


pytorch學(xué)習(xí):https://blog.csdn.net/lantuxin/article/details/87709344

2.查看類型拾因、大小

實(shí)例:

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())#查看大小

打印結(jié)果:

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

torch.FloatTensor

<class 'torch.Tensor'>

torch.Size([3])

torch.Size([3])

3.轉(zhuǎn)換Torch tensor到numpy

實(shí)例:

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))

打印結(jié)果:

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

torch.FloatTensor

[1. 2. 3.]

<class 'numpy.ndarray'>

4.轉(zhuǎn)換numpy到Torch tensor

實(shí)例:

import numpy as np

import torch

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

print(c)

a=torch.from_numpy(c)

print(a)

print(torch.tensor(c))

打印結(jié)果:

[[1 2]]

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

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

5.轉(zhuǎn)置

實(shí)例:

import torch

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

print(c)

print(c.t())

打印結(jié)果:

tensor([[1, 2]])

tensor([[1],

? ? ? ? [2]])

6.dot()

錯誤1:RuntimeError: dot: Expected 1-D argument self, but got 2-D

????新版本中(>=0.3.0), 關(guān)于 tensor.dot() 有了新的改變, 它只能針對于一維的數(shù)組. 所以上面的有所改變.輸入1維數(shù)組就ok

實(shí)例:

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)

打印結(jié)果:

tensor([[1, 2, 3],

? ? ? ? [0, 3, 6]])

tensor([[2, 1, 2],

? ? ? ? [1, 2, 3]])

tensor(34)

7.矩陣乘法:@条获、mm

實(shí)例:

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()))

打印結(jié)果:

tensor([[10, 14],

? ? ? ? [15, 24]])

tensor([[10, 14],

? ? ? ? [15, 24]])

8.where

實(shí)例:

import torch

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

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

print(a)

打印結(jié)果:

tensor([[ 0, 0, 0],

? ? ? ? [-1,? 0,? 0]])

9.查看系統(tǒng)是否支持CHDA

實(shí)例:

import torch

print(torch.cuda.is_available())

打印結(jié)果:

True(我自己電腦上裝有GPU顯卡)

10.使用GPU和CPU計(jì)算

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

(1)模型轉(zhuǎn)為cuda

gpus = [0] #使用哪幾個GPU進(jìn)行訓(xùn)練滤钱,這里選擇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()? #將模型轉(zhuǎn)為cuda類型

(2)數(shù)據(jù)轉(zhuǎn)化為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())? ? #將數(shù)據(jù)轉(zhuǎn)為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)輸出數(shù)據(jù)去cuda僧叉,轉(zhuǎn)為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轉(zhuǎn)為tensor類型叉讥,.numpy將tensor轉(zhuǎn)為numpy類型

else:

? ? correct_prediction = correct_prediction.numpy()

(4)附加

實(shí)例:

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

打印結(jié)果:

True(我自己電腦上有GPU)

tensor([[3, 3, 5],

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

11.一個簡單的梯度下降實(shí)例

(1)~(4):預(yù)備工作侍郭;(5):小案例

(1)zip

????使用zip()函數(shù)來可以把列表合并鸠珠,并創(chuàng)建一個元組對的列表

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

附加實(shí)例:

x=[1,2,3]

y=[4,5,6]

print(zip(x,y))

for i in zip(x,y):

print(i)

打印結(jié)果:

<zip object at 0x000002A45F847888>

(1, 4)

(2, 5)

(3, 6)

(2)grad_fn

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

Varibale包含三個屬性:

data:存儲了Tensor遗淳,是本體的數(shù)據(jù)

grad:保存了data的梯度变泄,本事是個Variable而非Tensor弊仪,與data形狀一致

grad_fn:指向Function對象,用于反向傳播的梯度計(jì)算之用

(3)mean

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

torch.mean(input) 輸出input 各個元素的的均值杖刷,不指定任何參數(shù)就是所有元素的算術(shù)平均值励饵,指定參數(shù)可以計(jì)算每一行或者 每一列的算術(shù)平均數(shù)

(4)backward()

pytorch中 backward 機(jī)制理解: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根據(jù)每一步的操作計(jì)算導(dǎo)數(shù)滑燃。

#backward只能被應(yīng)用在一個標(biāo)量上役听,也就是一個一維tensor,或者傳入跟變量相關(guān)的梯度表窘。

y=y.mean()#變成標(biāo)量典予。

y.backward()

#dx=1/3*2

print(x.grad)#打印導(dǎo)數(shù)。對標(biāo)量求導(dǎo)乐严。

print(x.data)

b=torch.tensor([2.],requires_grad=True)#實(shí)際中瘤袖,在后期版本,將Variable和tensor的東西合并了昂验,不需要使用Variable()封裝變量捂敌。

b.backward()

print(b.grad )

打印結(jié)果:

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)

#隨機(jī)給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

? ? ? ? #反向求導(dǎo)

? ? ? ? dw=-2*o*x

????????db=-2*o

#梯度更新

? ? ? ? w=w+0.1*dw#0.1:步長既琴、學(xué)習(xí)率

? ? ? ? b=b+0.1*db

print(w,b,loss)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末占婉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甫恩,更是在濱河造成了極大的恐慌逆济,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磺箕,死亡現(xiàn)場離奇詭異奖慌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)松靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門简僧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人击困,你說我怎么就攤上這事涎劈。” “怎么了阅茶?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蛛枚,是天一觀的道長。 經(jīng)常有香客問我脸哀,道長蹦浦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任撞蜂,我火速辦了婚禮盲镶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝌诡。我一直安慰自己溉贿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布浦旱。 她就那樣靜靜地躺著宇色,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颁湖。 梳的紋絲不亂的頭發(fā)上宣蠕,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音甥捺,去河邊找鬼抢蚀。 笑死,一個胖子當(dāng)著我的面吹牛镰禾,可吹牛的內(nèi)容都是我干的皿曲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吴侦,長吁一口氣:“原來是場噩夢啊……” “哼谷饿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妈倔,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤博投,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盯蝴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅哗,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年捧挺,在試婚紗的時候發(fā)現(xiàn)自己被綠了虑绵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡闽烙,死狀恐怖翅睛,靈堂內(nèi)的尸體忽然破棺而出声搁,到底是詐尸還是另有隱情,我是刑警寧澤捕发,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布疏旨,位于F島的核電站,受9級特大地震影響扎酷,放射性物質(zhì)發(fā)生泄漏檐涝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一法挨、第九天 我趴在偏房一處隱蔽的房頂上張望谁榜。 院中可真熱鬧,春花似錦凡纳、人聲如沸窃植。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撕瞧。三九已至,卻和暖如春狞尔,著一層夾襖步出監(jiān)牢的瞬間丛版,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工偏序, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留页畦,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓研儒,卻偏偏與公主長得像豫缨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子端朵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345