學習筆記之——pytorch
阿新 • • 發佈:2018-11-03
本博文為本人自學pytorch時寫的一系列學習筆記,僅僅供本人學習記錄用哈~
目錄
python
列表為[]
元組為()——不可修改元素的列表
字典{}——鍵值對。
在定義py函式中:可以傳遞任意數量的實參。一個星號(“*”)代表傳入元組、兩個星號(“**”)代表字典
類:
面向物件程式設計~
pytorch
Tensor是張量,是一個多維的矩陣。pytorch中的tensor可以與numpy的ndarray(N-dimensional array object)互相轉換。唯一的不同點僅僅是pytorch可以在GPU上執行,而numpy的ndarray只能在CPU上執行。
Tensor與numpy.ndarray之間的轉換
numpy_=tensor.numpy()
torch_=torch.from_numpy(numpy_)
通過tensor.cuda(),可以實現tensor放在GPU上。通過torch.cuda.is_available()來檢測是否支援GPU
(torch的0.4.0版本已經將 Variable 和 Tensor合併,統稱為 Tensor)
一維線性迴歸程式碼實現
import torch import numpy as np import torch.nn as nn import torch.optim as optim import matplotlib.pyplot as plt #numpy train x_train=np.array([[3.3],[4.4],[5.5],[6.71],[6.93],[4.168], [9.779],[6.182],[7.59],[2.167],[7.042], [10.791],[5.313],[7.997],[3.1]],dtype=np.float32) y_train=np.array([[1.7],[2.76],[2.09],[3.19],[1.694],[1.573], [3.366],[2.596],[2.53],[1.221],[2.827], [3.465],[1.65],[2.904],[1.3]],dtype=np.float32) #numpy.array to tensor x_train=torch.from_numpy(x_train) y_train=torch.from_numpy(y_train) class LinearRegression(nn.Module): def __init__(self): super(LinearRegression, self).__init__() self.linear=nn.Linear(1,1)#input and output is 1 dimension def forward(self,x): out=self.linear(x) return out if torch.cuda.is_available(): model=LinearRegression().cuda() else: model=LinearRegression() #define the optimer criterion=nn.MSELoss() optimizer=optim.SGD(model.parameters(),lr=1e-3) num_epochs=1000 for epoch in range(num_epochs): if torch.cuda.is_available: inputs=x_train.cuda() target=y_train.cuda() else: inputs=x_train target=y_train #forward out=model(inputs) loss=criterion(out,target) #backward optimizer.zero_grad()#the grad set to zero loss.backward()#backward optimizer.step()#One step parameter update through gradient if(epoch+1) % 20 ==0: print('Epoch[{}/{}],loss:{:.6f}'.format(epoch+1,num_epochs,loss.data[0])) #prediction model.eval() model.cpu() predict=model(x_train) predict=predict.data.numpy() plt.plot(x_train.numpy(),y_train.numpy(),'ro',label='Original data') plt.plot(x_train.numpy(),predict,label='fitting line') plt.show()
執行結果如下: