1.安装pytorch
在pytorch官网选择pyorch的安装的方式
https://pytorch.org/get-started/locally/
复制下面的Command运行即可
2.pytorch模型的构建
pytorch中模型的构建是通过类来构建的
import torch
import torch.nn.functional as F
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(1, 32)
self.predict = torch.nn.Linear(32, 1)
def forward(self, x):
x = F.relu(self.hidden(x))
x = self.predict(x)
return x
net = Net()
optimizer = torch.optim.Adam(net.parameters(), lr=0.02)
loss_func = torch.nn.MSELoss()
首先声明一个Net的类,然后类中包含有__init()__初始化函数和前向传递(就是预测)的forward函数。在初始化函数中定义每一层的结构,这里我们把激活函数放到前向传递中。
然后实例化这个类。
最后实例化网络所以需要的优化器和损失函数。
super(Net, self).__init__()
意思是Net的所有基类的__init()__函数
super(Net, self).init()
3.miniBatch的实现
miniBatch就是每次训练的数据是从所有数据中取出来的一小部分,这个在keras中很好实现,只需要在model.fit()
中定义参数batch_size即可。
import torch.utils.data as Data
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # x data (tensor), shape=(100, 1)
y = x.pow(4) + 0.2 * torch.rand(x.size()) # noisy y data (tensor), shape=(100, 1)
BATCH_SIZE = 20
torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True
)
4.模型训练
import matplotlib.pyplot as plt
plt.ion() # 模型的可视化
for epoch in range(100): # 训练100轮
for step, (batch_x, batch_y) in enumerate(loader):
prediction = net.forward(batch_x)
loss = loss_func(prediction, batch_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
prediction = net(x)
if step == 4:
# plot and show learning process
plt.cla()
plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
print('epoch', epoch)
if epoch == 99:
plt.ioff()
plt.show()
5.keras和pytorch的哲学
只是记录下自己觉得keras和pytorch的不同,我觉得keras是在tensorflow的基础之上的,tensorflow包含什么计算图什么的我也不懂,但是用pip安装的时候有300多M,听闻github上代码有100多万行,keras所做的工作是把tensorflow的复杂隐藏起来,给你一个简单的tensorflow,但是pytorch更像是你自己用原汁原味的python去搭建一个神经网络,你知道什么是前向传递什么是反向传递求解梯度,我觉得pytorch的速度应该比keras快。