猫狗识别中的卷积及特征图可视化

本文介绍了猫狗识别中的卷积神经网络(CNN)应用,包括搭建简单CNN模型,理解卷积原理、通道概念以及数据增强的作用。通过训练网络并存储模型,重点探讨了卷积层的特征图可视化,展示从浅层到深层特征的抽象过程。
摘要由CSDN通过智能技术生成

(学习笔记) 

操作内容

  • 搭建简单CNN;
  • 运用CNN相关的计算:卷积后的长宽高 ;
  • 可视化卷积后的特征图

 目标

  • 理解视觉感知、图像表达的概念
  • 理解图像卷积的原理、通道的概念
  • 理解卷积神经网络对图像处理的优点
  • 理解全连接神经网络图像识别的原理
  • 理解paddingstriding、感受野的概念
  • 掌握单/多通道卷积算法的实现

实验环境

  • python 3.6
  • tensorflow 2.4.1
  • Keras 2.4.3
  • pandas 0.24.2
  • numpy 1.19.5
  • matplotlib 3.3.4

 实验原理及步骤

 步骤1:导入相关包或模块

import os
import cv2
import numpy as np
import shutil # 复制文件
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense,
Dropout,BatchNormalization, Activation
from keras.optimizers import RMSprop
from keras.models import Model
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
from keras.preprocessing import image

步骤2:设置目录  

# 存储较小数据集的目录
base_dir = '../Dataset/dogs-vs-cats/'
# 训练、验证、测试数据集的目录
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'val')
test_dir = os.path.join(base_dir, 'test')
# 猫训练图片所在目录
train_cats_dir = os.path.join(train_dir, 'cat')
# 狗训练图片所在目录
train_dogs_dir = os.path.join(train_dir, 'dog')
# 猫验证图片所在目录
validation_cats_dir = os.path.join(validation_dir, 'cat')
# 狗验证数据集所在目录
validation_dogs_dir = os.path.join(validation_dir, 'dog')
# 猫测试数据集所在目录
test_cats_dir = os.path.join(test_dir, 'cat')
# 狗测试数据集所在目录
test_dogs_dir = os.path.join(test_dir, 'dog')

 步骤3:数据增强

  • 数据增强:将数据量适当扩充,以提高模型的泛化能力
  • ImageDataGenerator() keras.preprocessing.image模块中的图片生成器,可以每一次给模型一个batch_size大小的样本数据,同时也可以在每一个批次中对这batch_size个样本数据进行增强,扩充数据集大小,增强模型的泛化能力。比如进行旋转,变形,归一化等等
  • ImageDataGenerator() 关键参数
rescale : 重缩放因子。默认为 None 。如果是 None 0 ,不进行缩放,否则将数据乘以所提供的
值(在应用任何其他转换之前)
rotation_range : 整数。随机旋转的度数范围
width_shift_range : 浮点数、一维数组或整数。 float: 如果 <1 ,则是除以总宽度的值,或者如果
>=1 ,则为像素值。 1-D 数组 : 数组中的随机元素。
height_shift_range : 浮点数、一维数组或整数。 float: 如果 <1 ,则是除以总宽度的值,或者如果
>=1 ,则为像素值。 1-D array-like: 数组中的随机元素。
shear_range : 浮点数。剪切强度(以弧度逆时针方向剪切角度)
zoom_range : 浮点数 或 [lower, upper] 。随机缩放范围
horizontal_flip : 布尔值。随机水平翻转
fill_mode : {"constant", "nearest", "reflect" or "wrap"} 之一。默认为 'nearest' 。输入边界以外的
点根据给定的模式填充
"""数据增强"""
# 对训练图像进行数据增强
train_pic_gen = ImageDataGenerator(rescale=1./255,
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.5,
horizontal_flip=True,
fill_mode='nearest')
# 对测试图像进行数据增强
test_pic_gen = ImageDataGenerator(rescale=1./255)
# 利用 .flow_from_directory 函数生成训练数据
train_flow = train_pic_gen.flow_from_directory(train_dir,
target_size=(224,224),
batch_size=64,
class_mode='categorical')
# 利用 .flow_from_directory 函数生成测试数据
test_flow = test_pic_gen.flow_from_directory(test_dir,
target_size=(224,224),
batch_size=64,
class_mode='categorical')
print(train_flow.class_indices)
训练数据类别输出:
Found 4000 images belonging to 2 classes.
Found 200 images belonging to 2 classes.
{'cat': 0, 'dog': 1}

步骤4:搭建网络模型  

  • 可使用序列模型 Sequential
  • 序列模型各层之间是依次顺序的线性关系,模型结构通过一个列表来制定或者采用.add()逐层添加网络结构
"""网络构建"""
resize = 224
model = Sequential()
Conv2D 创建一个卷积层,对输入数据进行卷积操
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值