PyTorch学习 -- 花式实现MNIST手写数字识别

本文介绍了作者在假期中学习PyTorch的感受,对比了PyTorch与TensorFlow的使用体验,认为PyTorch的动态计算图更为灵活。文章通过DNN、CNN和RNN等模型,详细展示了如何在PyTorch中实现MNIST手写数字识别的训练过程。
摘要由CSDN通过智能技术生成

假期抽空了解了一下PyTorch,感觉用起来特别特别顺手。作为一个直追TensorFlow并与之相抗衡的深度学习框架,感觉使用起来要比TensorFlow简洁许多。

在TensorFlow中,总是需要先构建一个计算图,一旦计算图构建下来还不能随便改变,这是挺难受的。后面的数据还得用占位符占着,,万一想改又重新开始写,总的来说这是个静态的框架,功能毋庸置疑的强大,但是计算流程的灵活性难以保证。

而PyTorh就不一样,是个动态框架,在编程上和python的逻辑几乎一样,干啥都很灵活,这让我很是享受啊哈哈哈。可能是我了解还不够深入,反正就现在的体验来看,更喜欢PyTorch一些。

下面就记录一下基于PyTorch分别用DNN,CNN,RNN等等,实现以下手写数字识别这个简单小实验:

首先,导入模块

import torch
from torch import nn,optim
from torch.autograd import Variable
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

接下来就是定义各种各样的网络:

#定义简单的三层全连接网络,这个网络不包含激活函数,可以做对比
#传入参数包括:输入维度、第一层神经元个数、第二层神经元个数、输出层神经元个数
class simpleNet(nn.Module):
    def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
        super(simpleNet, self).__init__()
        self.layer1 = nn.Linear(in_dim, n_hidden_1)
        self.layer2 = nn.Linear(n_hidden_1, n_hidden_2)
        self.layer3 = nn.Linear(n_hidden_2, out_dim)
    
   
    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x


#对于上面的简单三层全连接网络加上添加激活函数,用以对比
class Activation_Net(nn.Module):
    def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
        super(Activation_Net, self).__init__()
        #Sequential是将网络的层组合到一起,如将Linear和ReLU组合到一起作为self.layer
        self.layer1 = nn.Sequential(
            nn.Linear(in_dim, n_hidden_1), nn.ReLU(True))
        self.layer2 = nn.Sequential(
            nn.Linear(n_hidden_1, n_hidden_2), nn.ReLU(True))
        self.layer3 = nn.Sequential(nn.L
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值