这是我的第一篇深度学习讲解博客,其实我更推荐新手从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)
)
到这里我们的入门神经网络就搭建完成啦,下一节我会教大家利用入门网络在自己的数据集上训练分类模型。