1. 程式人生 > >學習筆記之——pytorch

學習筆記之——pytorch

本博文為本人自學pytorch時寫的一系列學習筆記,僅僅供本人學習記錄用哈~

 

目錄

python

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()


執行結果如下: