中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
人工智能基礎(chǔ)篇-數(shù)據(jù)處理

為了不被淘汰,只能趕快學(xué)起來了!chatgpt的大火帶動了很多AI行業(yè)的快速發(fā)展,也導(dǎo)致了失業(yè)潮一波又一波,就業(yè)難等等,和我一樣迷茫的小伙伴一起學(xué)起來吧!

1.環(huán)境搭建

1.1 安裝Miniconda

windows安裝miniconda比較簡單不再贅述。

https://docs.conda.io/en/latest/miniconda.html

下載win版安裝即可。

1.2 創(chuàng)建環(huán)境

打開cmd命令行執(zhí)行如下命令:

conda create --name d2l python=3.9 -y

激活 d2l 環(huán)境:

conda activate d2l

安裝pytorch,之前在公眾號有發(fā)過深度學(xué)習(xí)環(huán)境的搭建教程,這里直接根據(jù)自己的cuda版本執(zhí)行命令即可

pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

1.3 安裝jupyter notebook

jupyter 算是python學(xué)習(xí)很不錯的一款工具,這里不再贅述

在啟動jupyter notebook時,有報錯信息,如下:

ModuleNotFoundError: No module named  jupyter_nbextensions_configurator

解決報錯:

  1. python -m pip install --user jupyter_contrib_nbextensions
  2. python -m pip install --user jupyter_nbextensions_configurator

2.數(shù)據(jù)操作

首先我們介紹n維數(shù)組,也稱為張量(tensor).在pytorch中的張量與Numpy的ndarray類似。但深度學(xué)習(xí)的框架比Numpy中的ndarray多一些重要的功能:首先GPU很好地支持加速計算,其次,張量類支持自動微分。這些功能使得張量類更適合深度學(xué)習(xí)。

2.1.1 入門

首先,我們導(dǎo)入torch

import torch

張量表示一個由數(shù)值組成的數(shù)組,這個數(shù)組可能有多個維度。具有一個軸的張量對應(yīng)數(shù)學(xué)上的向量(vector);具有兩個軸的張量對應(yīng)數(shù)學(xué)上的矩陣(matrix);具有兩個軸以上的張量沒有特殊的數(shù)學(xué)名稱。

首先,我們使用arange創(chuàng)建一個行向量x。這個行向量包含以0開始的前12個整數(shù),它們默認(rèn)創(chuàng)建為整數(shù)。也可以指定創(chuàng)建類型為浮點數(shù)。張量中的每個值都稱為張量的元素(element)。除非額外指定,新的張量將存儲在內(nèi)存中,并采用CPU計算。

x = torch.arange(12)

x

tensor([0,1,2,3,4,5,6,7,8,9,10,11])

可以通過張量的shape屬性類訪問張量的形狀。

張量的形狀指的是每個(Dimension)軸由多少個元素組成的信息。

x.shape

torch.Size([12])

#張量中元素的總數(shù)
x.numel()
12
#要想改變一個張量的形狀而不改變元素數(shù)量和元素值,可以調(diào)用reshape函數(shù)。例如,可以把張量x從形狀為(12,)的行向量轉(zhuǎn)換為形狀為(3,4)的矩陣。
#注意,通過改變張量的形狀,張量的大小不會改變。
X = x.reshape(3,4)
X
tensor([[ 0, 1, 2, 3],
      [ 4, 5, 6, 7],
      [ 8, 9, 10, 11]])
#生成全0的張量
torch.zeros((2,3,4))  
tensor([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

      [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])
#生成全1的張量
torch.ones((2,3,4))
tensor([[[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]],

      [[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]]])
#生成隨機值,且每個元素都從均值為0、標(biāo)準(zhǔn)差為1的標(biāo)準(zhǔn)高斯分布(正態(tài)分布)中隨機采樣。
torch.randn((2,3))
tensor([[-0.7534, -0.4173, 0.8888],
      [-1.5095, -0.6197, -0.4746]])
# 通過python列表為張量賦值  ,在這里,最外層的列表對應(yīng)于軸0,內(nèi)層的列表對應(yīng)于軸1。
torch.tensor([[2,1,4,3],[1,2,3,4],[4,3,2,1]])
tensor([[2, 1, 4, 3],
      [1, 2, 3, 4],
      [4, 3, 2, 1]])

2.1.2 運算符

對于任意具有相同形狀的張量, 常見的標(biāo)準(zhǔn)算術(shù)運算符(+、-、*、/**)都可以被升級為按元素運算。我們可以在同一形狀的任意兩個張量上調(diào)用按元素操作。

#運算符
x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])
x + y,x - y,x * y,x / y,x ** y
(tensor([ 3., 4., 6., 10.]),
tensor([-1., 0., 2., 6.]),
tensor([ 2., 4., 8., 16.]),
tensor([0.5000, 1.0000, 2.0000, 4.0000]),
tensor([ 1., 4., 16., 64.]))
#求冪運算
torch.exp(x)
tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])
#多個張量連結(jié)(concatenate)

X = torch.arange(12,dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[4,3,2,1]])
torch.cat((X,Y),dim=0),torch.cat((X,Y),dim=1) #按行連結(jié),按列連結(jié)
(tensor([[ 0., 1., 2., 3.],
        [ 4., 5., 6., 7.],
        [ 8., 9., 10., 11.],
        [ 2., 1., 4., 3.],
        [ 1., 2., 3., 4.],
        [ 4., 3., 2., 1.]]),
tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
        [ 4., 5., 6., 7., 1., 2., 3., 4.],
        [ 8., 9., 10., 11., 4., 3., 2., 1.]]))
#通過邏輯運算符構(gòu)建二元張量
X == Y
tensor([[False, True, False, True],
      [False, False, False, False],
      [False, False, False, False]])
#對張量中的所有元素求和會產(chǎn)生一個單元素張量
X.sum()
tensor(66.)

2.1.3 廣播機制

#在某些情況下,即使張量形狀不同,我們也可以通過調(diào)用廣播機制來執(zhí)行按元素操作
#這種機制的工作方式如下:
#通過適當(dāng)復(fù)制元素來擴展一個或兩個數(shù)組,以便在轉(zhuǎn)換之后,兩個張量具有相同的形狀;
#對生成的數(shù)組執(zhí)行按元素操作。
#在大多數(shù)情況下,我們將沿著數(shù)組中長度為1的軸進(jìn)行廣播,如下例子:
a = torch.arange(3).reshape((3,1))
b = torch.arange(2).reshape((1,2))
a,b,torch.arange(2)
(tensor([[0],
        [1],
        [2]]),
tensor([[0, 1]]),
tensor([0, 1]))
#由于a和b分別是矩陣,如果讓它們相加,它們的形狀不匹配。我們將兩個矩陣廣播為一個更大的矩陣,
#如下所示:矩陣a將復(fù)制列, 矩陣b將復(fù)制行,然后再按元素相加。
a + b
tensor([[0, 1],
      [1, 2],
      [2, 3]])

2.1.4 索引和切片

就像在任何其他Python數(shù)組中一樣,張量中的元素可以通過索引訪問。與任何Python數(shù)組一樣:第一個元素的索引是0,最后一個元素索引是-1;可以指定范圍以包含第一個元素和最后一個之前的元素。

如下所示,我們可以用[-1]選擇最后一個元素,可以用[1:3]選擇第二個和第三個元素:

X[-1],X[1:3]
(tensor([ 8., 9., 10., 11.]),
tensor([[ 4., 5., 6., 7.],
        [ 8., 9., 10., 11.]]))
#指定元素寫入矩陣
X[1,2] = 9
X
tensor([[ 0., 1., 2., 3.],
      [ 4., 5., 9., 7.],
      [ 8., 9., 10., 11.]])
#多個元素賦相同值 [0:2, :]訪問第1行和第2行,其中“:”代表沿軸1(列)的所有元素
X[0:2,:] = 12
X
tensor([[12., 12., 12., 12.],
      [12., 12., 12., 12.],
      [ 8., 9., 10., 11.]])

2.1.5 節(jié)省內(nèi)存

運行一些操作可能會導(dǎo)致為新結(jié)果分配內(nèi)存。例如,如果我們用Y = X + Y,我們將取消引用Y指向的張量,而是指向新分配的內(nèi)存處的張量。

# id()函數(shù)提供了內(nèi)存中引用對象的確切地址
#運行Y = Y + X后,我們會發(fā)現(xiàn)id(Y)指向另一個位置。這是因為Python首先計算Y + X,為結(jié)果分配新的內(nèi)存,然后使Y指向內(nèi)存中的這個新位置。
before = id(Y)
Y = Y + X
id(Y) == before
before,id(Y)
(2760437537488, 2760358641424)
#這可能是不可取的,原因有兩個:

#首先,我們不想總是不必要地分配內(nèi)存。在機器學(xué)習(xí)中,我們可能有數(shù)百兆的參數(shù),并且在一秒內(nèi)多次更新所有參數(shù)。
#通常情況下,我們希望原地執(zhí)行這些更新;如果我們不原地更新,其他引用仍然會指向舊的內(nèi)存位置,這樣我們的某些代碼可能會無意中引用舊的參數(shù)。
#我們可以使用切片表示法將操作的結(jié)果分配給先前分配的數(shù)組,例如Y[:] = <expression>
Z = torch.zeros_like(Y)
print('id(Z):',id(Z))
Z[:] = X + Y
print('id(Z):',id(Z))
id(Z): 2760442838640
id(Z): 2760442838640
#如果在后續(xù)計算中沒有重復(fù)使用X, 我們也可以使用X[:] = X + Y或X += Y來減少操作的內(nèi)存開銷。
before = id(X)
X += Y
id(X) == before
True

2.1.6 轉(zhuǎn)換為其他python對象

#將深度學(xué)習(xí)框架定義的張量轉(zhuǎn)換為NumPy張量(ndarray)很容易,反之也同樣容易。
#torch張量和numpy數(shù)組將共享它們的底層內(nèi)存,就地操作更改一個張量也會同時更改另一個張量。
A = X.numpy()
B = torch.tensor(A)
type(A),type(B)
(numpy.ndarray, torch.Tensor)
#要將大小為1的張量轉(zhuǎn)換為Python標(biāo)量,我們可以調(diào)用item函數(shù)或Python的內(nèi)置函數(shù)。
a = torch.tensor([3.5])
a,a.item(),float(a),int(a)
(tensor([3.5000]), 3.5, 3.5, 3)

#深度學(xué)習(xí)存儲和操作數(shù)據(jù)的主要接口是張量(維數(shù)組)。它提供了各種功能,包括基本數(shù)學(xué)運算、廣播、索引、切片、內(nèi)存節(jié)省和轉(zhuǎn)換其他Python對象。

ok第一期學(xué)習(xí)筆記就到這了,希望在看的小伙伴點個在看,支持我繼續(xù)寫下去。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
張量的降維操作
Python | Numpy 圖文詳解(向量、切片索引、廣播)
【Deep Learning with PyTorch 中文手冊】(七) Tensor fundamentals
PyTorch:view() 與 reshape() 區(qū)別詳解
PyTorch張量Tensor的一些必備操作
深度學(xué)習(xí)中實現(xiàn)PyTorch和NumPy之間的數(shù)據(jù)轉(zhuǎn)換知多少?
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服