深度学习之卷积神经网络

  • 卷积神经网络
    在图像识别中,像素个数过多。
    减少训练参数数量的办法:提取出图像中的关键信息(轮廓),再建立mlp模型进行训练
  • 图像卷积运算(convolution)
    对图像矩阵与滤波器矩阵进行对应相乘再求和运算,转化得到新的矩阵。
    作用: 快速定位图像中某些边缘特征
    A与B的卷积表示为:A*B或convolution(A,B)

在这里插入图片描述

以下是卷积运算中寻找竖向轮廓跟横向轮廓
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


RGB图像的卷积:对R\G\B三个通道分别求卷积再相加
在这里插入图片描述
nxn的像素矩阵与f x f 的过滤矩阵得到的结果是(n-f+1)x(n-f+1)

  • 池化层实现维度缩减
    池化:按照一个固定规则对图像矩阵进行处理,将其转换为更低维度的矩阵(即保留核心信息的情况下,实现维度缩减)

    1.最大法池化(Max-pooling):
    在这里插入图片描述

    2.平均法池化(Avg-pooling):
    在这里插入图片描述


  • 卷积神经网络
    把卷积、池化、mlp先后连接在一起,组成卷积神经网络
    在这里插入图片描述

卷积神经网络的两大特点:
1、参数共享(parameter sharing):同一个特征过滤器可用于整张图片
2、稀疏连接(sparsity of connections):生成的特征图每个节点只与原图片中特定节点连接

卷积运算导致的两个问题:1.图像被压缩,造成信息丢失;2.边缘信息使用少,容易被忽略

图像填充(padding):通过在图像各边增加像素,使其在进行卷积运算后维持原图大小(在图形矩阵与过滤器矩阵相乘的过程中,矩阵边缘的数值被使用的次数要少于中间的数值)
通过padding增加像素的数量,由过滤器尺寸与stride(步长)决定


  • 经典的CNN模型:

    • LeNet-5:
      在这里插入图片描述

    • AlexNet

    在这里插入图片描述

在这里插入图片描述 VGG-16:
在这里插入图片描述在这里插入图片描述

  • 经典的CNN模型用于新场景:
    1.使用经典的CNN模型结构对图像进行预处理,再建立MLP模型
    2.参考经典的CNN结构搭建新模型
    e.g.

在这里插入图片描述
此处去除了经典模型的全连接层,改变模型的输出类型

  • 实战一:建立CNN实现猫狗识别(核心代码)
#图片加载
from keras.preprocessing.image import ImageDataGenerator

#图像增强/预处理配置(数值归一化、缩放、旋转、平移等)
train_datagen = ImageDataGenerator(rescale=1./255) //rgb的最大值为255
#加载图像:
training_set = train_datagen.flow_from_directory('./Dataset/training_set',target_size=(50,50),batch_size=32,class_mode='binary')
//target_size:图像自动转换的尺寸;batch_size=32:每次训练选择的图片数量;class_mode='binary':使用的是二分类

'''
训练与预测:
'''
#配置模型
model.complie(optimizer='adam',loss = 'binary_crossentropy',metrics=['accuracy'])
#查看模型结构
model.summary()
#训练模型
model.fit_generator(training_set,epochs=25)
#计算预测准确率
model.evaluate_generator(training_set)

  • 实战二:基于VGG16、结合mlp实现猫狗识别:(核心代码)

使用VGG16的结构提取图像特征,再根据特征建立mlp模型,实现猫狗图像识别、训练/测试数据:dataset\data_vgg:
对数据进行分离、计算测试数据预测准确率
从网站下载猫/狗图片,对其进行预测
备注:mlp模型只有一个隐藏层(10个神经元)

图片加载:
from keras.preprocessing.image import img_to_array,load_img
img_path = '1.jpg'
img = load_img(img_path,target_size=(224,224))
img = img_to_array(img)

#图片预处理:
from keras.application.vgg16 import preprocessing_input
x = np.expand_dims(img,axis=0)

#把图片矩阵转化为可用于VGG16输入的矩阵
x = preprocess_input(x)

#载入VGG16结构(去除全连接层)
from keras.application.vgg16 import VGG16
model_vgg = VGG16(weights='imagenet',include_top=False)

#特征提取
features = model_vgg.predict(X)

建立mlp模型:

#建立一个Sequential顺序模型并添加各层
from keras.models import Sequential
model = Sequential()
from keras.layers import Dense
model.add(Dense(units=10,acitvation='relu',input_dim=25088))
model.add(Dense(units=1,activation='sigmoid'))
model.summary()

#通过.compile()配置模型求解过程参数
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

#训练模型
model.fit(X_train,y_train,epochs=50)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰杰批

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值