zoukankan      html  css  js  c++  java
  • 14 深度学习-卷积

    1.简述人工智能、机器学习和深度学习三者的联系与区别。

     

    人工智能

    机器学习

    深度学习

    联系

    人工智能是最早出现的,也是最大、最外侧的同心圆;其次是机器学习,稍晚一点;最内侧,是深度学习,也是当今人工智能大爆炸的核心驱动。

    人工智能>机器学习>深度学习

    区别

     为机器赋予人的智能,是目的,是结果,适用图像分类、人脸识别

     一种实现人工智能的方法,应用领域是计算机视觉

     一种实现机器学习的技术,适合处理大数据

    2. 全连接神经网络与卷积神经网络的联系与区别。

     

    全连接神经网络

    卷积神经网络

    含义

    全连接神经网络(DNN)是最朴素的神经网络,它的网络参数最多,计算量最大。

    卷积神经网络是一种深度前馈人工神经网络,已成功地应用于图像识别。

    联系

    结构相似,输入输出以及训练的流程也基本一致。

    区别

    每层隐藏层的每个神经元都和相邻隐藏层的所有神经元相连接。

    不是全连接的,隐藏层的每个神经元只是和上一个隐藏层某一小片相连。

    卷积神经网络可以更好的处理图像数据。

     3.理解卷积计算。

    以digit0为例,进行手工演算。

    from sklearn.datasets import load_digits #小数据集8*8

    digits = load_digits()

    0 0 5 13 9 1 0 0
    0 0 13 15 10 15 5 0
    0 3 15 2 0 11 8 0
    0 4 12 0 0 8 8 0
    0 5 8 0 0 9 8 0
    0 4 11 0 1 12 7 0
    0 2 14 5 10 12 0 0
    0 0 6 13 10 0 0 0

    (参考:https://blog.csdn.net/leviopku/article/details/80327478

    通常用外部api进行卷积的时候,会面临mode选择,full、same、valid,这三种不同模式是对卷积核移动范围的不同限制。

    扫描图片时划过像素的个数影响卷积后长度,默认1个像素。

    公式:新图片尺寸=[(原图片尺寸-卷积核尺寸+2*像素数)/步长]+1(先取整数再+1)

    可以指定步长(精细度) 

    已知原图片尺寸为8*8,设卷积核尺寸是3x3,步长是1。

    卷积核为:

    (1)Full

     

    橙色部分为image, 蓝色部分为filter。full模式的意思是,从filter和image刚相交开始做卷积,白色部分为填0。

    结果:8*8->10*10 变大

    (2)Same:保留边界处的卷积结果

     

    当filter的中心(K)与image的边角重合时,开始做卷积运算,可见filter的运动范围比full模式小了一圈。

    注意:这里的same还有一个意思,卷积之后输出的feature map尺寸保持不变(相对于输入图片)。当然,same模式不代表完全输入输出尺寸一样,也跟卷积核的步长有关系。

    same模式也是最常见的模式,因为这种模式可以在前向传播的过程中让特征图的大小保持不变,调参师不需要精准计算其尺寸变化(因为尺寸根本就没变化)。
    结果:8*8->8*8 不变

    (3)Valid:只进行有效的卷积,对边界数据不处理

     

     当filter全部在image里面的时候,进行卷积运算,可见filter的移动范围较same更小了。

    结果:8*8->6*6 变小

    4.理解卷积如何提取图像特征。

    读取一个图像;

    以下矩阵为卷积核进行卷积操作;

    显示卷积之后的图像,观察提取到什么特征。

    卷积API

    scipy.signal.convolve2d

    tf.keras.layers.Conv2D

     1 from PIL import Image
     2 import numpy as np
     3 from scipy.signal import convolve2d
     4 import matplotlib.pyplot as plt
     5 
     6 # 读取一个图像
     7 I = Image.open(r'C:UserslenovoPicturesSaved Pictures3.jpg')
     8 L = I.convert('L')
     9 
    10 img=np.array(I)  # img原图 
    11 imgg=np.array(L) # imgg灰度图
    12 
    13 # 以下矩阵为卷积核进行卷积操作
    14 k1=np.array([[1,0,-1],[1,0,-1],[1,0,-1]])       # 垂直边缘检测
    15 k2=np.array([[1,1,1],[0,0,0],[-1,-1,-1]])       # 水平边缘检测
    16 k3=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])  # 检测中间
    17 
    18 # imgg:二维数组,k1:卷积核,boundary:边界填充方式,mode卷积类型
    19 img1 = convolve2d(imgg,k1,boundary='symm',mode='same')
    20 img2 = convolve2d(imgg,k2,boundary='symm',mode='same')
    21 img3 = convolve2d(imgg,k3,boundary='symm',mode='same')
    22 
    23 # 显示卷积之后的图像
    24 plt.matshow(img)   
    25 plt.matshow(imgg)  
    26 plt.matshow(img1)  
    27 plt.matshow(img2)  
    28 plt.matshow(img3)  

    原图


    灰度图

    垂直边缘检测                                       水平边缘检测                                        中心边缘检测

    垂直边缘检测:可以看出图片中物体的垂直方向边界特征被提取出来,而其他的特征被弱化了。

    水平边缘检测:可以看出图片中物体的水平方向边界特征被提取出来,而其他的特征被弱化了。

    中心边缘检测:可以看出图片中物体的中心边界特征被提取出来,而四周边界的特征被弱化了。

    5. 安装Tensorflow,keras

    参考:https://blog.csdn.net/u011119817/article/details/88309256

    用conda安装可以判断所有安装包的版本间的兼容性。

    6. 设计手写数字识别模型结构,注意数据维度的变化。

    from tensorflow.keras.models import Sequential

    from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPool2D

    model = tf.keras.Sequential()

    model.add(Conv2D(…))

    model.add(MaxPool2D(…))

    ...

    #可以上传手动演算的每层数据结构的变化过程。model.summary() 

     1 # 导入相关包
     2 # sequential设计层数
     3 from tensorflow.keras.models import Sequential
     4 from tensorflow.keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D
     5 
     6 #建立模型
     7 model=Sequential()
     8 
     9 ks=(3,3)   # 卷积核大小
    10 ips=(16,16,1)
    11 
    12 #一层卷积
    13 model.add(
    14     Conv2D(filters=32,          # 卷积核的个数
    15            kernel_size=ks,     # 卷积核大小
    16            padding='same',     # 保证卷积核大小,不够不算
    17            input_shape=ips,    
    18            activation='relu')) # activation: 激活函数,'relu','sigmoid'等
    19 
    20 #池化层1
    21 model.add(MaxPool2D(pool_size=(2,2)))
    22 model.add(Dropout(0.25))
    23 
    24 #二层卷积
    25 model.add(
    26     Conv2D(filters=64,kernel_size=ks,padding='same',activation='relu'))
    27 #池化层2
    28 model.add(MaxPool2D(pool_size=(2,2)))
    29 model.add(Dropout(0.25))
    30 
    31 #三层卷积
    32 model.add(
    33     Conv2D(filters=128,kernel_size=ks,padding='same',activation='relu'))
    34 #池化层3
    35 model.add(MaxPool2D(pool_size=(2,2)))
    36 model.add(Dropout(0.25))
    37 
    38 
    39 model.add(Flatten()) #平坦层
    40 model.add(Dense(128,activation='relu')) #dense全连接层
    41 model.add(Dropout(0.25))
    42 model.add(Dense(10,activation='softmax')) #激活函数  softmax分类
    43 
    44 model.summary()

    参考:

    https://www.jianshu.com/p/afe485aa08ce

    https://blog.csdn.net/junjun150013652/article/details/82217571

  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/linyanli/p/13042514.html
Copyright © 2011-2022 走看看