网站认证怎么做,东莞建网站服务,中国广东网站建设,企业宣传网站多大主机系列文章目录
计算机视觉入门 1#xff09;卷积分类器计算机视觉入门 2#xff09;卷积和ReLU计算机视觉入门 3#xff09;最大池化计算机视觉入门 4#xff09;滑动窗口计算机视觉入门 5#xff09;自定义卷积网络计算机视觉入门 6#xff09; 数据集增强#xff08;D…系列文章目录
计算机视觉入门 1卷积分类器计算机视觉入门 2卷积和ReLU计算机视觉入门 3最大池化计算机视觉入门 4滑动窗口计算机视觉入门 5自定义卷积网络计算机视觉入门 6 数据集增强Data Augmentation 提示仅为个人学习笔记分享若有错漏请各位老师同学指出Thanks♪(ω) 目录 系列文章目录一、自定义卷积网络从简单到精细卷积块 二、【代码示例】构建一个简单的卷积网络步骤1 - 加载数据步骤2 - 定义模型步骤3 - 训练模型 一、自定义卷积网络
从简单到精细
前几篇笔记介绍了卷积网络通过三个操作进行特征提取过滤检测和压缩。一次特征提取只能从图像中提取相对简单的特征例如简单的线条或对比度。这些特征对于解决大多数分类问题来说过于简单。相反卷积网络会一遍又一遍地重复这个提取过程使特征在网络内部深入传递时变得更加复杂和精细。
卷积块
它通过将图像通过一系列的卷积块来进行这个过程从而实现这一点。
这些卷积块是Conv2D和MaxPool2D层的堆叠如下所示 每个块代表一轮提取通过组合这些块卷积网络可以将产生的特征组合和重新组合。现代卷积网络的深层结构使得这种复杂的特征工程成为可能从而大大提高它们在处理和解决任务上的性能。
二、【代码示例】构建一个简单的卷积网络
步骤1 - 加载数据
# 导入库
import os, warnings
import matplotlib.pyplot as plt
from matplotlib import gridspecimport numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing import image_dataset_from_directory# 设置随机种子以保证可复现性
def set_seed(seed31415):np.random.seed(seed)tf.random.set_seed(seed)os.environ[PYTHONHASHSEED] str(seed)os.environ[TF_DETERMINISTIC_OPS] 1
set_seed()# 设置Matplotlib默认值
plt.rc(figure, autolayoutTrue)
plt.rc(axes, labelweightbold, labelsizelarge,titleweightbold, titlesize18, titlepad10)
plt.rc(image, cmapmagma)
warnings.filterwarnings(ignore) # 清理输出单元格# 加载训练集和验证集
ds_train_ image_dataset_from_directory(../input/car-or-truck/train,labelsinferred,label_modebinary,image_size[128, 128],interpolationnearest,batch_size64,shuffleTrue,
)
ds_valid_ image_dataset_from_directory(../input/car-or-truck/valid,labelsinferred,label_modebinary,image_size[128, 128],interpolationnearest,batch_size64,shuffleFalse,
)# 数据处理管道
def convert_to_float(image, label):image tf.image.convert_image_dtype(image, dtypetf.float32)return image, labelAUTOTUNE tf.data.experimental.AUTOTUNE
ds_train (ds_train_.map(convert_to_float).cache().prefetch(buffer_sizeAUTOTUNE)
)
ds_valid (ds_valid_.map(convert_to_float).cache().prefetch(buffer_sizeAUTOTUNE)
)步骤2 - 定义模型
下面是我们将使用的模型的图示 现在我们来定义模型。注意我们的模型由三个 Conv2D 和 MaxPool2D 层块组成后面跟着一些 Dense 层。我们可以通过填写适当的参数将这个图示基本上直接转化为一个 Keras Sequential 模型。
from tensorflow import keras
from tensorflow.keras import layersmodel keras.Sequential([# 第一个卷积块layers.Conv2D(filters32, kernel_size5, activationrelu, paddingsame,# 在第一层中提供输入维度# [高度, 宽度, 颜色通道(RGB)]input_shape[128, 128, 3]),layers.MaxPool2D(),# 第二个卷积块layers.Conv2D(filters64, kernel_size3, activationrelu, paddingsame),layers.MaxPool2D(),# 第三个卷积块layers.Conv2D(filters128, kernel_size3, activationrelu, paddingsame),layers.MaxPool2D(),# 分类头部layers.Flatten(),layers.Dense(units6, activationrelu),layers.Dense(units1, activationsigmoid),
])
model.summary()这个代码定义了一个包含三个卷积块的模型每个块都由一个 Conv2D 层和一个 MaxPool2D 层组成。最后的分类头部包括一个扁平化层(Flatten)两个密集连接层(Dense)用于输出预测结果。模型总共有大约50万个参数它们将根据训练数据进行调整以进行有效的特征提取和分类。
输出模型Summary 注意这里每个块的过滤器数量都是逐块翻倍增加的32、64、128。这是一种常见的模式。由于MaxPool2D层在每个块中降低了特征图的尺寸因此我们可以逐块增加我们创建的特征图数量。
步骤3 - 训练模型
# 加入损失函数和准确率
model.compile(optimizertf.keras.optimizers.Adam(epsilon0.01),lossbinary_crossentropy,metrics[binary_accuracy]
)#模型训练
history model.fit(ds_train,validation_datads_valid,epochs40,verbose0,
)import pandas as pd#结果查看
history_frame pd.DataFrame(history.history)
history_frame.loc[:, [loss, val_loss]].plot()
history_frame.loc[:, [binary_accuracy, val_binary_accuracy]].plot();这个模型只有简单的3个卷积层尽管如此它仍然能够相当好地适应这个数据集。 见上图蓝色曲线快速地变化同时黄色曲线验证集val在10轮训练过程后就进入波动稳定的状态 这表明模型容易过拟合需要正则化处理。 后续可以添加更多的卷积层、或者Dropout层来进行正则化继续改进这个模型。