2000年初期最主要的机器学习算法是核方法。其核心是特征提取、选择和函数来计算相关性、凸优化问题(凸优化问题指的是在定义域内具有全局最优解的问题)、漂亮的定理。
ImageNet(2010)
AlexNet
正是因为ImageNet变大,才使得AlexNet神经网络可以更深更大。
上图右边两张部分分别是深度学习神经网络前后对图片的处理。在深度学习神经网络之后的优点是CNN更易学习,不必了解过多计算机视觉的知识;CNN与softmax一起训练,效率更高。
VGG
VGG16是13层卷积层+3层全连接层
VGG使用可重复的卷积块来构建深度卷积神经网络。
不同的卷积块个数和超参数可以得到不同复杂度的变种。
NiN
1X1卷积唯一就是可以进行通道数的改变。
使用全局平均池化,即当输入通道数是类别数时,全局平均池化后相当于每个通道取出一个平均值作为结果。
GoogLeNet
由图中可以看到最后输出高宽比不变。
由图中看到只有通道数的改变,白色框进行通道数改变,深蓝框进行通道信息或空间信息提取。
批量归一化
批量归一化固定小批量中的均值和方差,然后学习出合适的偏移和缩放。
可以加速收敛速度,但一般不改变模型精度。
ResNet
增加神经网络深度即增加层数总是可以改进精度吗
如上图,蓝色星星是最优模型,下方大小表示模型复杂度,左边随着模型复杂度增加,离最优解距离并没有逐渐减小,只有像右边,大模型始终包含小模型,才会不至于模型越大反而不如之前模型效果。
以函数来举例,最差f(x)结果是g(x)没有学习到东西。
宽高减半即在第一个ResNet块中一个卷积层将宽高减半。
也是5部分。
代码:
import numpy as np
import matplotlib.pyplot as plt
import os
import torch
import torch.nn as nn
import torchvision
from torchvision import models,transforms,datasets
import csv
import cv2
from torch.autograd import Variable
from PIL import Image
# 判断是否存在GPU设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print('Using gpu: %s ' % torch.cuda.is_available())
#数据处理
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
data_transform = transforms.Compose([
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize,
])
'''加载数据'''
!wget https://static.leiphone.com/cat_dog.rar
!unrar x cat_dog.rar