pytorch教程龙曲良06-10
06手寫數(shù)字識別1
每張圖片2828
針對y=wx+b
對于手寫數(shù)字圖片來說可以用灰度0-1表示,所以就是2828值在0-1的矩陣,然后打平變成784的向量
y的維度怎么表示
法1先討論H1,H2,H3的維度,以下都表示維度,Hi不斷作為Hi+1的一個輸入,如[1,784]表示一行784列,但這樣h1,h2…h(huán)9存在大小關(guān)系,沒有相關(guān)性 ,
07手寫數(shù)字識別02
法2用one-hot去表示概率,
1=[0,1,0,0,0,0,0,0,0,0]
3=[0,0,0,1,0,0,0,0,0,0]
求loss 歐式距離 (pred-Y)**2使得這個10維矩陣差最小
𝑝𝑟𝑒𝑑 = 𝑊3 ? {𝑊2 [𝑊1𝑋 + 𝑏1] + 𝑏2} + 𝑏3
這樣還是可以優(yōu)化成wx+b的形式,還是線性的,所以我們在每層加激活函數(shù)(sigmod function)變成非線性的,這樣表達能力就增強了
目標是:求和(pred-Y)**2最小,找到對于任意一個x都滿足目標的w和b
y_pred是一個[1,10]的矩陣,[0.1, 0.8, 0.01, 0, 0.02, …]
而真實的y是[0, 1, 0, 0, 0, …]
p(0|x)=0.1表示給定一個新的x,它的標簽是數(shù)字0的概率是0.1 p(1|x)=0.8表示給定一個新的x,它的標簽是數(shù)字0的概率是0.8
…
max(pred)就是找到最大值0.8
argmax(pred)就是找到0.8的標簽索引,label=1,我們希望max(pred)與真實值1越接近越好,這樣就可以直接拿出他對應(yīng)的標簽
08基本數(shù)據(jù)類型1
怎么表示string:
One – hot
? [0, 1, 0, 0, …]
缺少語義相關(guān)性,而且矩陣洗漱
? Embedding
? Word2vec
? glove
byteTensor比較tensor的大小,返回的0和1
三個重要的Tensor
FloatTensor IntTensor ByteTensor
Type check
randn(random normal distribution)是一種產(chǎn)生標準正態(tài)分布()的隨機數(shù)或矩陣的函數(shù)。randn是均值為0方差為1的正態(tài)分布,返回一個n*n的隨機項的矩陣.
[2,3]兩行三列
一般檢驗用的是
a.type()和isinstance(a,torch.FloatTensor)
數(shù)據(jù)一樣但是位置不同類型不同
data一開始放在cpu上就會false,搬到gpu就true
對于標量直接放入數(shù)字即可,產(chǎn)生的就是維度為0的tensor,因為求出的loss就是標量
怎么檢查dim=0
dim=1 維度為1,即vector,dim=1的tensor常常用于計算bias和linear input
在pt0.3版本以前沒有dim=0的存在,loss=0.3打印出的是[0.3]表示的是dim=1的一維向量,雖然一個數(shù)字的一維向量可以表示向量,但是不好區(qū)別
0.3版本以后才是打印出0.3標量
完全區(qū)分了標量和向量
怎么得到dim=1的shape或者size:a.shape
區(qū)別dim,shape,size
dim是指維度,(類比一維數(shù)組)
size/shape指的是dim的長度/形狀(元素長度)
tensor指的是具體的矩陣
09數(shù)據(jù)類型02
dim=2
a=torch.randn(2,3)#或者FloatTensor(2,3) 兩行三列的矩陣 a.size(0)#返回第一個維度長度 a.size(1)#返回第二個維度長度適用于Linear Input batch
比如有4張784維的照片,即寫成[4,784]
dim=2,shape=[ 4,784]
(4行784列,每行代表一張圖片)
dim=3
適用于RNN input Batch,比如每一句話10個單詞,每個單詞用100維的one-hot編碼,一句話表示為:[word,features] [10,100]
如果多句話,每次送20句話,batch=20,20句sentence,[word,batch,features] [10,20,100]
rand()是0-1的均勻隨機分布
a=torch.rand(1,2,3) #因為第一個維度是1,所以一個【】,兩個[],[]內(nèi)三個元素A,B,C #tensor([【[A,B,C],[E,D,F]】]) #([[[A,B,C],[E,D,F]]])dim=3,首尾分別跟著三個[和]a[0]#返回的是第一個元素的第一個元素就是維度為[2,3]的tensor([[A,B,C],[E,D,F]])dim=4適用于cnn,圖片,[b,c,h,w]即[batch,channel,height,width]
[2,3,28,28]#表示2張圖片(batch=2),通道數(shù)為3則為彩色圖片(RGB),通道數(shù)為1是灰色圖片,28,28分別表示圖片的長和寬
numel就是"number of elements"的簡寫。numel()可以直接返回int類型的元素個數(shù)
10創(chuàng)建Tensor01
1import from numpy使用torch.from_numpy
a=np.array([2,3.3]) #創(chuàng)建一個dim=1,長度為2的向量,最左邊只跟了一個[ torch.from_numpy(a)a=no.ones([2,3])#創(chuàng)建一個所有元素都是1的兩行三列的矩陣 torch.from_numpy(a)2import from list
注:
torch.tensor()#接收的指定的元素的值
torch.Tensor()和torch.FloatTensor()#接受的是shape數(shù)據(jù)的維度
比如torch.Tensor(2,3)創(chuàng)建一個兩行三列的tensor,但是有時候Tensor也可以接收指定數(shù)據(jù),但是要用[]list括起來,比如torch.Tensor([2.,3.2])創(chuàng)建的是一個一維度向量,tensor([2.0000,3.2000])
但是為了不混淆,
一般用小寫tensor接受具體數(shù)據(jù)torch.tensor([A,B,C]),一般用大寫Tensor 接受shape,torch.Tensor(d1,d2,d3)
uninitialized
創(chuàng)建了一片空間不希望初始化
Torch.empty()#接受的是shape torch.FloatTensor(d1,d2,d3)a=torch.FloatTensor([1,2]) b=torch.tensor([1,2]) c=torch.Tensor([1,2]) print(a) print(b) print(c) ''' tensor([1., 2.]) tensor([1, 2]) tensor([1., 2.])'''
未初始化的數(shù)據(jù)沒有規(guī)則,很大或者很小,之后不給未初始化的數(shù)據(jù)賦值可能會報錯,torch.nan或者torch.inf
不設(shè)置的話默認是FloatTensor類型
當設(shè)置為DoubleTensor時候,輸入
他們的類型會自動轉(zhuǎn)化為DoubleTensor
隨機初始化
rand:值在[0,1]之間,接收的是shape rand_like:接收的是tensor,相當于把a.shape讀出來再送給rand函數(shù)
randint:值在我們指定的[min,max)之間,
torch.randint(min,max,shape)
如torch.randint(1,10,[3,3])
總結(jié)
以上是生活随笔為你收集整理的pytorch教程龙曲良06-10的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch教程龙曲良01-05
- 下一篇: pytorch教程龙曲良11-15