pytorch模型搭建方式

1.安装pytorch

在pytorch官网选择pyorch的安装的方式
https://pytorch.org/get-started/locally/
pytorch模型搭建方式_第1张图片
复制下面的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快。

你可能感兴趣的:(机器学习)