图像分类呆呆地(一)——torch入门级别分类网络搭建

图像分类呆呆地——torch入门级别分类网络搭建


这是我的第一篇深度学习讲解博客,其实我更推荐新手从Keras开始学习了解深度学习,Keras对新手来说真的是非常非常友好了,而且如果你的模型不是 “最最最” 先进的,又或者不是那么的 “独特” ,Keras完全能够满足你的需求,并且能为你节省大量的时间。

当然,除了pyTorch,我也会为大家系统讲解Keras如何搭建各种网络模型,希望我们能够一起学习进步。深度学习框架Keras和PyTorch对比

学习前言

这是我的哔哩哔哩讲解视频,欢迎大家一键三连~~~

Bilibili主页:https://space.bilibili.com/481802918

入门网络搭建

这是一个非常基础的网络架构,用于手写字体的识别。在这个网络中只是卷积层和池化层的简单堆叠,以及最后利用全连接层训练分类器。学习这个网络是为了让我们熟悉PyTorch搭建网络的基础和流程,为以后我们学习更高级的神经网络做基础。

一:网络结构

在这里插入图片描述
由网络的结构图我们可以清晰的看出:这个入门网络的大体流程为:
    卷积层  ->  池化层   ->   卷积层   ->  池化层    ->  全连接层->全连接层->全连接层
(32x32x1)->(30x30x6)->(15x15x6)->(13x13x16)-> (6x6x16)  -> (120, )  ->  (84, )->(10, )

二:代码部分

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        
        # nn.Conv2d(输入通道数1, 输出通道数6, 卷积核尺寸3x3)
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        
        # 全连接层
        # (16 * 6 * 6)为(通道数 x 特征层的高 x 特征层的宽)
        self.fc1 = nn.Linear(16 * 6 * 6, 120) # 定义fc1(fullconnect)全连接函数1为线性函数:y = Wx + b,并将16*6*6个节点连接到120个节点上。
        self.fc2 = nn.Linear(120, 84)#定义fc2(fullconnect)全连接函数2为线性函数:y = Wx + b,并将120个节点连接到84个节点上。
        self.fc3 = nn.Linear(84, 10)#定义fc3(fullconnect)全连接函数3为线性函数:y = Wx + b,并将84个节点连接到10个节点上。
        # 10为分类的个数(0~9一共10个数字)


	#定义该神经网络的向前传播函数,该函数必须定义,一旦定义成功,向后传播函数也会自动生成(autograd)
    def forward(self, x):
        # 最大池化2x2
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # 参数可以写成(2, 2)也可以写成 2
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))#view函数将张量x变形成一维的向量形式,总特征数并不改变,为接下来的全连接作准备。
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x
        
	
    def num_flat_features(self, x):
    #使用num_flat_features函数计算张量x的总特征量(把每个数字都看成是一个特征,即特征总量),比如x是4*2*2的张量,那么它的特征总量就是16。
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)





#输出为:
Net(
  (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1))
  (fc1): Linear(in_features=576, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

到这里我们的入门神经网络就搭建完成啦,下一节我会教大家利用入门网络在自己的数据集上训练分类模型。

图像分类呆呆地(二)——动手训练入门级别图像分类模型

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值