深度学习13-cnn介绍(卷积神经网络简介)

本文介绍了卷积神经网络(CNN)的基本原理,包括卷积层、池化层和全连接层的详细讲解,探讨了CNN在深度学习中解决的问题,并通过TensorFlow展示了2D卷积和池化的实现。此外,还涵盖了常见的CNN架构及其广泛应用。
摘要由CSDN通过智能技术生成


在这里插入图片描述

1.CNN解决了什么问题?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.CNN基本原理

在这里插入图片描述
在这里插入图片描述

1)卷积层

卷积层的前向传播以及计算公式
在这里插入图片描述

图片:7*7*3
通道:3个输入通道
卷积核

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出通道高度:5 - 3 + 2) / 2 + 1 = 3
输出通道宽度:(5 - 3 + 2 ) / 2 + 1 = 3
2)tf自带的2D卷积层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)动手实现卷积层
Numpy版本
import numpy as np

def conv_numpy(x,w,b,pad,strides):
    # x表示输入张量,w表示卷积核,b表示偏置,pad表示填充,strides表示步长
    out = None 
    N,H.W,C = x.shape
    F,HH,WW,C = w.shape
    
    X = np.pad(x,((0,0),(pad,pad),(pad,pad),(0,0)),'constant')
    
    # 计算输出张量的高度与宽度
    Hn = 1 + int((H + 2 * pad - HH) / strides[0])
    Wn = 1 + int((W + 2 * pad - WW) / strides[1])
    
    out = np.zeros((N,Hn,Wn,F))
    
    for n in range(N):
        for m in range(F):
            for i in range(Hn):
                for j in range(Wn):
                    data = X[n,i * strides[0] : i * strides[0] + HH,j * strides[1] : j * strides[1] + WW, :].reshape(1,-1)  # 行
                    filt = w[m].reshape(-1,1)     # 列
                    out[n,i,j,m] = data.dot(filt) + b(m)
    return out
tf2.0版本
def corr2d(x,w,b,pad,strides):
    # x表示输入张量,w表示卷积核,b表示偏置,pad表示填充,strides表示步长
    out = None 
    N,H.W,C = tf.shape(x)
    F,HH,WW,C = tf.shape(w)
    
    X = tf.pad(x,((0,0),(pad,pad),(pad,pad),(0,0)),'constant')
    
    # 计算输出张量的高度与宽度
    Hn = 1 + int((H + 2 * pad - HH) / strides[0])
    Wn = 1 + int((W + 2 * pad - WW) / strides[1])
    
    Y = tf.Variable(tf.zeros((N,Hn,Wn,F),dtype = tf.float32))
    
    
    for m in range(F):
        for i in range(Hn):
            for j in range(Wn):
                data = X[:,i * strides[0] : i * 1 + HH,j * strides[1] : j * 1 + WW, :]
                    filt = w[m,:,:,:]
                    Y[:,i,j,m].assign(tf.reducr_sum(tf.multiply(data,filt),axis=(1,2,3)) + b[m])
    return Y
4)池化层

在这里插入图片描述
在这里插入图片描述
加粗样式
在这里插入图片描述

5)动手实现池化层
tf自带的MaxPool2D

在这里插入图片描述
在这里插入图片描述

Numpy版本池化层
def max_pool_forward_native(x,pool_size=(2,2),strides=(1,1)):
    
    N,H,W,C = x.shape
    h_p,w_p = pool_size
    h_s,w_s = strides
    
    Hn = 1 + int((H - h_p) / h_s)
    Wn = 1 + ins((W - w_p) / w_s)
    out = np.zeros((N,Hn,Wn,C))
    
    for i in range(Hn):
        for j in range(Wn):
            out[:,i,j,:] = np.max(x[:.i*h_s : i*h_s+h_p, j*w_s: j*w_s+w_p,:],axis=(1,2))
            
    return out
tf版本池化层
def pool2d(X, pool_size=(2,2),strides=(1,1)):
    N,H,W,C = tf.shape(X)
    p_h,p_w = pool_size
    s_h,s_w = strides
    
    Y = tf.zeros((N,(H - p_h + 1) // s_h, (W - p_w + 1// s_w ,C))
    Y = tf.Variable(Y)
    
    for i in tf.range(tf.shape(Y)[1]):
        for j on tf.range(tf.shape(Y)[2]):
            Y[:,i,j,:].assign(tf.math.reduce_max(X[:,i*s_h : i*s_h+p_h, j*s_w : j*s_w+p_w,:],axis=(1,2),keepdims=Flase))
            
    return Y
6)全连接层

在这里插入图片描述

3.常用CNN架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.CNN有哪些实际应用

加粗样式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值