pytorch簡單程式設計

2021-10-22 09:09:29 字數 2385 閱讀 7396

1:用tensorflow或pytorch實現兩個tensor的矩陣a和b的乘法,其中a為二維,b為n維(n >= 3)

2d張量要和3d張量的後兩個維度滿足矩陣相乘條件。

點乘——torch.mul(a, b)

矩陣相乘有torch.mm(a, b)和torch.matmul(a, b)兩個函式。

前乙個是針對二維矩陣,後乙個是高維。

對於維數相同的張量

a.shape =(b,m,n);b.shape = (b,n,k)

numpy.matmul(a,b) 結果shape為(b,m,k)

要求第一維度相同,後兩個維度能滿足矩陣相乘條件。

比如 a.shape =(m,n); b.shape = (b,n,k); c.shape=(k,l)

numpy.matmul(a,b) 結果shape為(b,m,k)

numpy.matmul(b,c) 結果shape為(b,n,l)

2d張量要和3d張量的後兩個維度滿足矩陣相乘條件。

2:用pytorth,實現乙個2層的感知機二分類器。需要實現基本功能,包括:定義輸入、網路結構、batch的loss、acc、**結果的label,**結果的概率分布等。

//生成資料

import matplotlib.pyplot as plt

from sklearn.cluster import spectralclustering

import sklearn.datasets

x,y = sklearn.datasets.make_moons(

200,noise=

0.2)

plt.scatter(x[:,

0],x[:,1

],s=

40,c=y,cmap=plt.cm.spectral)

//接下來將樣本資料從 numpy 轉成 tensor:

x = torch.from_numpy(x)

.type

(torch.floattensor)

y = torch.from_numpy(y)

.type

(torch.longtensor)

//開始構建神經網路,其中損失函式用交叉熵損失函式,梯度優化器用adam。

import torch.nn as nn

import torch.nn.functional as f

class

myclassifier

(nn.module)

:def

__init__

(self)

:super

(myclassifier,self)

.__init__(

) self.fc1 = nn.linear(2,

3)self.fc2 = nn.linear(3,

2)defforward

(self,x)

: x = self.fc1(x)

x = f.tanh(x)

x = self.fc2(x)

return x

defpredict

(self,x)

: pred = f.softmax(self.forward(x)

) ans =

for t in pred:

if t[0]

>t[1]

:0)else:1

)return torch.tensor(ans)

model = net(

)criterion = nn.crossentropyloss(

)#交叉熵損失函式

optimizer = torch.optim.adam(model.parameters(

), lr=

0.01

)#adam梯度優化器

//訓練

epochs =

10000

losses =

for i in

range

(epochs)

: y_pred = model.forward(x)

loss = criterion(y_pred,y)))

optimizer.zero_grad(

) loss.backward(

) optimizer.step(

)//測試

from sklearn.metrics import accuracy_score

print

(accuracy_score(model.predict(x)

,y))

# output

0.995

TensorFlow與PyTorch程式設計方式不同

參考 pytorch 命令式程式設計 tensorflow 符號式程式設計 與命令式程式設計不同,符號式程式設計通常在計算流程完全定義好後才被執行。多個深度學習框架,如theano和tensorflow,都使用了符號式程式設計。通常,符號式程式設計的程式需要下面3個步驟 定義計算流程 把計算流程編譯...

Julia Flux與Pytorch的簡單比較

julia flux與pytorch的簡單比較 最近一直都在了解julia語言,並且看到了julia中的自動微分flux。所以去了解了一下,用乙個例子簡單的和pytorch比較了一下。比較的例子來自於pytorch tutorials 中的learning pytorch with example的...

學習pytorch(四)簡單RNN舉例

import torch 簡單rnn學習舉例。rnn 迴圈神經網路 是把乙個線性層重複使用,適合訓練序列型的問題。單詞是乙個序列,序列的每個元素是字母。序列中的元素可以是任意維度的。實際訓練中,可以首先把序列中的元素變為合適的維度,再交給rnn層。學習 將hello 轉為 ohlol。dict e ...