本博文为本人自学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()
运行结果如下: