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