深度学习实践实验-卷积神经网络
卷积神经网络
1、手写数字识别
通过MNIST数据集训练得到一个手写数字分类器。要求设计一个至少包含2个卷积层和池化层的卷积神经网络。卷积核的尺寸不小于5*5,要求训后的得到的网络在测试集准确率不低于96%(要求在网络中使用dropout)
完成程度:获取MNIST数据集并保存,获取图片的训练集和测试集,构建卷积神经网络模型,包含2个卷积层,2个池化层,2个全连接层,在最后一个全连接前加入一个dropout层。定义模型和损失函数,并将模型和损失函数送入到GPU当中去,使用训练集训练模型,用测试集进行测试验证,最终准确率有99.35%。
2、CIFAR-10分类网络
通过CIFAR-10数据集训练得到一个手写数字分类器。要求设计一个至少包含2个卷积层和池化层的卷积神经网络。卷积核的尺寸统一采用3*3,要求训后的得到的网络在测试集上的准确率不低于70%(要求在网络中使用BatchNorm)
完成程度:下载CIFAR-10实验数据集,并将其划分成训练集和测试集,查看图片的尺寸,图片尺寸为32*32,一共有3个通道,定义卷积神经网络,一共包含5个卷积层,5个BN层,3个池化层,2个全连接层,最后一个全连接层前加一个dropout层。在GPU上利用训练集训练网络模型,一共进行20测迭代,最终在测试集上进行测试验证,模型训练的准确性为78.84%。
手写数字识别
python
1 |
|
python
1 |
|
python
1 |
|
python
1 |
|
(1, 28, 28)

python
1 |
|
python
1 |
|
python
1 |
|
0 损失值: tensor(0.1942, device='cuda:0', grad_fn=<NllLossBackward0>)
1 损失值: tensor(0.3168, device='cuda:0', grad_fn=<NllLossBackward0>)
2 损失值: tensor(0.0090, device='cuda:0', grad_fn=<NllLossBackward0>)
3 损失值: tensor(0.2042, device='cuda:0', grad_fn=<NllLossBackward0>)
4 损失值: tensor(0.0557, device='cuda:0', grad_fn=<NllLossBackward0>)
5 损失值: tensor(0.1490, device='cuda:0', grad_fn=<NllLossBackward0>)
6 损失值: tensor(0.0090, device='cuda:0', grad_fn=<NllLossBackward0>)
7 损失值: tensor(0.0358, device='cuda:0', grad_fn=<NllLossBackward0>)
8 损失值: tensor(0.1654, device='cuda:0', grad_fn=<NllLossBackward0>)
9 损失值: tensor(0.0103, device='cuda:0', grad_fn=<NllLossBackward0>)
10 损失值: tensor(0.0287, device='cuda:0', grad_fn=<NllLossBackward0>)
11 损失值: tensor(0.0289, device='cuda:0', grad_fn=<NllLossBackward0>)
12 损失值: tensor(0.1634, device='cuda:0', grad_fn=<NllLossBackward0>)
13 损失值: tensor(0.0111, device='cuda:0', grad_fn=<NllLossBackward0>)
14 损失值: tensor(0.0598, device='cuda:0', grad_fn=<NllLossBackward0>)
15 损失值: tensor(0.0598, device='cuda:0', grad_fn=<NllLossBackward0>)
16 损失值: tensor(0.0384, device='cuda:0', grad_fn=<NllLossBackward0>)
17 损失值: tensor(0.0041, device='cuda:0', grad_fn=<NllLossBackward0>)
18 损失值: tensor(0.0288, device='cuda:0', grad_fn=<NllLossBackward0>)
19 损失值: tensor(0.0030, device='cuda:0', grad_fn=<NllLossBackward0>)
python
1 |
|
python
1 |
|
tensor(59609, device='cuda:0') 60000 tensor(0.9935, device='cuda:0')
CIFAR-10分类网络
python
1 |
|
python
1 |
|
Files already downloaded and verified
python
1 |
|
python
1 |
|
python
1 |
|
638
torch.Size([3, 32, 32])
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
<matplotlib.image.AxesImage at 0x27e882a9c70>
python
1 |
|
model(
(conv1): Conv2d(3, 4, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv2): Conv2d(4, 8, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv3): Conv2d(8, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv4): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv5): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(pool2): AvgPool2d(kernel_size=2, stride=2, padding=0)
(dropout): Dropout2d(p=0.5, inplace=False)
(batch_norm1): BatchNorm2d(4, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(batch_norm2): BatchNorm2d(8, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(batch_norm3): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(batch_norm4): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(batch_norm5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(fc1): Linear(in_features=1024, out_features=512, bias=True)
(fc2): Linear(in_features=512, out_features=10, bias=True)
)
python
1 |
|
D:\02_soft\anaconda3\envs\pytorch\lib\site-packages\torch\nn\functional.py:1331: UserWarning: dropout2d: Received a 2-D input to dropout2d, which is deprecated and will result in an error in a future release. To retain the behavior and silence this warning, please use dropout instead. Note that dropout2d exists to provide channel-wise dropout on inputs with 2 spatial dimensions, a channel dimension, and an optional batch dimension (i.e. 3D or 4D inputs).
warnings.warn(warn_msg)
==========================================================================================
Layer (type:depth-idx) Output Shape Param #
==========================================================================================
model [64, 10] --
├─Conv2d: 1-1 [64, 4, 32, 32] 112
├─BatchNorm2d: 1-2 [64, 4, 32, 32] 8
├─Conv2d: 1-3 [64, 8, 32, 32] 296
├─BatchNorm2d: 1-4 [64, 8, 32, 32] 16
├─Conv2d: 1-5 [64, 16, 32, 32] 1,168
├─BatchNorm2d: 1-6 [64, 16, 32, 32] 32
├─MaxPool2d: 1-7 [64, 16, 16, 16] --
├─Conv2d: 1-8 [64, 32, 16, 16] 4,640
├─BatchNorm2d: 1-9 [64, 32, 16, 16] 64
├─AvgPool2d: 1-10 [64, 32, 8, 8] --
├─Conv2d: 1-11 [64, 64, 8, 8] 18,496
├─BatchNorm2d: 1-12 [64, 64, 8, 8] 128
├─MaxPool2d: 1-13 [64, 64, 4, 4] --
├─Linear: 1-14 [64, 512] 524,800
├─Dropout2d: 1-15 [64, 512] --
├─Linear: 1-16 [64, 10] 5,130
==========================================================================================
Total params: 554,890
Trainable params: 554,890
Non-trainable params: 0
Total mult-adds (M): 289.00
==========================================================================================
Input size (MB): 0.79
Forward/backward pass size (MB): 42.21
Params size (MB): 2.22
Estimated Total Size (MB): 45.22
==========================================================================================
python
1 |
|
D:\02_soft\anaconda3\envs\pytorch\lib\site-packages\torch\nn\functional.py:1331: UserWarning: dropout2d: Received a 2-D input to dropout2d, which is deprecated and will result in an error in a future release. To retain the behavior and silence this warning, please use dropout instead. Note that dropout2d exists to provide channel-wise dropout on inputs with 2 spatial dimensions, a channel dimension, and an optional batch dimension (i.e. 3D or 4D inputs).
warnings.warn(warn_msg)
第 0 个epoch,loss为: tensor(1.4621, device='cuda:0', grad_fn=<NllLossBackward0>)
第 1 个epoch,loss为: tensor(1.1412, device='cuda:0', grad_fn=<NllLossBackward0>)
第 2 个epoch,loss为: tensor(0.7093, device='cuda:0', grad_fn=<NllLossBackward0>)
第 3 个epoch,loss为: tensor(1.1387, device='cuda:0', grad_fn=<NllLossBackward0>)
第 4 个epoch,loss为: tensor(1.1270, device='cuda:0', grad_fn=<NllLossBackward0>)
第 5 个epoch,loss为: tensor(0.1355, device='cuda:0', grad_fn=<NllLossBackward0>)
第 6 个epoch,loss为: tensor(2.1455, device='cuda:0', grad_fn=<NllLossBackward0>)
第 7 个epoch,loss为: tensor(0.2261, device='cuda:0', grad_fn=<NllLossBackward0>)
第 8 个epoch,loss为: tensor(0.3833, device='cuda:0', grad_fn=<NllLossBackward0>)
第 9 个epoch,loss为: tensor(1.3244, device='cuda:0', grad_fn=<NllLossBackward0>)
第 10 个epoch,loss为: tensor(0.1666, device='cuda:0', grad_fn=<NllLossBackward0>)
第 11 个epoch,loss为: tensor(0.8256, device='cuda:0', grad_fn=<NllLossBackward0>)
第 12 个epoch,loss为: tensor(0.8673, device='cuda:0', grad_fn=<NllLossBackward0>)
第 13 个epoch,loss为: tensor(0.0255, device='cuda:0', grad_fn=<NllLossBackward0>)
第 14 个epoch,loss为: tensor(0.8387, device='cuda:0', grad_fn=<NllLossBackward0>)
第 15 个epoch,loss为: tensor(0.1123, device='cuda:0', grad_fn=<NllLossBackward0>)
第 16 个epoch,loss为: tensor(0.0009, device='cuda:0', grad_fn=<NllLossBackward0>)
第 17 个epoch,loss为: tensor(0.0298, device='cuda:0', grad_fn=<NllLossBackward0>)
第 18 个epoch,loss为: tensor(0.5178, device='cuda:0', grad_fn=<NllLossBackward0>)
第 19 个epoch,loss为: tensor(0.3033, device='cuda:0', grad_fn=<NllLossBackward0>)
python
1 |
|
python
1 |
|
tensor(7884, device='cuda:0') 10000 tensor(0.7884, device='cuda:0')
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zdon!
评论