深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13

2023-11-17

import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pathlib

数据读取及预处理

data_dir = "./2_class"# 文件路径
data_root = pathlib.Path(data_dir)# 构建路径对象
for item in data_root.iterdir(): # 对目录进行迭代查看文件路径及对象
    print(item)

在这里插入图片描述

all_image_path = list(data_root.glob("*/*"))#使用glob方法及正则表达式提取目录里面所有文件
len(all_image_path) # 1400个数据

在这里插入图片描述

all_image_path[:3]# 通过切片查看前3个文件

在这里插入图片描述

all_image_path = [str(path) for path in all_image_path]# 使用str把路径变成一个实际的路径
all_image_path[10:12]

在这里插入图片描述

import random
random.shuffle(all_image_path)# 把内容乱序
all_image_path[10:12]

在这里插入图片描述

image_count = len(all_image_path)
image_count # 记录图片的张数

在这里插入图片描述

label_names = sorted (item.name for item in data_root.glob("*/")) # 提取分类名字
label_names

在这里插入图片描述

# 编码airplane对应0, lake对应1
label_to_index = dict((name,index) for index,name in enumerate(label_names))
label_to_index

在这里插入图片描述

all_image_path[:3]

在这里插入图片描述

pathlib.Path("2_class\\lake\\lake_405.jpg").parent.name

在这里插入图片描述

all_image_label = [label_to_index[pathlib.Path(p).parent.name]for p in all_image_path]
all_image_label[:5]
all_image_path[:5]

在这里插入图片描述

import IPython.display as display
index_to_label = dict((v,k) for k,v in label_to_index.items())
index_to_label

在这里插入图片描述

读取和解码图片

for n in range(3):
    image_index = random.choice(range(len(all_image_path)))
    display.display(display.Image(all_image_path[image_index]))
    print(index_to_label[all_image_label[image_index]])
    print()

在这里插入图片描述

# 对单张图片进行处理过程
# 使用tf读取图片
img_path = all_image_path[0]
img_path

在这里插入图片描述

img_raw = tf.io.read_file(img_path)
img_raw # 二进制的图片

在这里插入图片描述

# 解码图片
img_tensor = tf.image.decode_image(img_raw)
img_tensor.shape

在这里插入图片描述

img_tensor

在这里插入图片描述

img_tensor = tf.cast(img_tensor,tf.float32)# 转换数据类型为float32
img_tensor

在这里插入图片描述

# 标准化
img_tensor = img_tensor/255

在这里插入图片描述

定义函数对图片进行处理

# 定义函数对图片进行处理
def load_preprosess_image(img_paht):
    img_raw = tf.io.read_file(img_path) # 读取图片的路径
    img_tensor = tf.image.decode_jpeg(img_raw,channels=3)# 解码图片channels=3代表彩色图片
    img_tensor = tf.image.resize(img_tensor,[256,256]) #定义图片大小
    img_tensor = tf.cast(img_tensor,tf.float32) # 转化图片类型
    img = img_tensor/255 # 标准化
    return img

在这里插入图片描述

使用tf.data 构建图片输入管道

# 构造tf.data对所有图片进行处理
path_ds = tf.data.Dataset.from_tensor_slices(all_image_path)
image_dataset = path_ds.map(load_preprosess_image)# 使用上面定义好的图片处理函数处理all_image_path中所有的图片
label_dataset = tf.data.Dataset.from_tensor_slices(all_image_label)

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

# 合并
dataset = tf.data.Dataset.zip((image_dataset,label_dataset))

在这里插入图片描述

# 划分测试集与训练集
test_count = int(image_count*0.2)
train_count = image_count-test_count

在这里插入图片描述

train_dataset = dataset.skip(test_count) # skip 跳过测试集的张数
test_dataset = dataset.take(test_count)
BATCH_SIZE = 32# 每次训练32张
train_dataset = train_dataset.shuffle(buffer_size=train_count).batch(BATCH_SIZE)

在这里插入图片描述

test_dataset = test_dataset.batch(BATCH_SIZE)

建立模型

# 增加BN层
#建立模型
model = tf.keras.Sequential() # 顺序模型
model.add(tf.keras.layers.Conv2D(64,(3,3),input_shape=(256,256,3)))# 添加一个卷积层
model.add(tf.keras.layers.BatchNormalization()) # 批标准化
model.add(tf.keras.layers.Activation("relu")) # 激活层

model.add(tf.keras.layers.Conv2D(64,(3,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.MaxPooling2D())
model.add(tf.keras.layers.Conv2D(128,(3,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.MaxPooling2D())
model.add(tf.keras.layers.Conv2D(256,(3,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.MaxPooling2D())
model.add(tf.keras.layers.Conv2D(512,(3,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.MaxPooling2D())
model.add(tf.keras.layers.Conv2D(1024,(3,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.GlobalAveragePooling2D()) # 全局池化
model.add(tf.keras.layers.Dense(1024))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.Dense(256))
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Activation("relu"))

model.add(tf.keras.layers.Dense(1,activation="sigmoid"))#二分类使用sigmoid激活
model.summary()

在这里插入图片描述

# 编译模型
model.compile(optimizer="adam",
             loss="binary_crossentropy",
             metrics=["acc"])
steps_per_epoch = train_count//BATCH_SIZE
validation_steps = test_count//BATCH_SIZE # 步数

# 训练模型
history = model.fit(train_dataset,epochs=30,
                    steps_per_epoch=steps_per_epoch,
                    validation_data=test_dataset,
                    validation_steps=validation_steps)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13 的相关文章

随机推荐

  • MongoDB游标

    数据库会使用游标返回 find 的执行结果 游标的客户端实现通常能够在很大程度上对查询的最终输出进行控制 你可以限制结果的数量 跳过一些结果 按任意方向的任意键组合对结果进行排序 以及执行许多其他功能强大的操作 要使用 shell 创建游标
  • 爬虫实战之华为应用市场

    目录 一 需求说明 二 步骤 1 检查当前页面的URL所获得的响应的数据 笨办法 程序验证 不建议 简单办法 抓包 验证 抓包 推荐 动态加载验证 查找页面的信息 2 获取排行页面数据 操作 源码 信息解析 3 详情页面分析 寻找URL 验
  • leetcode 577

    给定一个字符串 s 你需要反转字符串中每个单词的字符顺序 同时仍保留空格和单词的初始顺序 示例 1 输入 s Let s take LeetCode contest 输出 s teL ekat edoCteeL tsetnoc 示例 2 输
  • C++中的强引用与弱引用

    https juejin cn post 7102838307062546445 1 weak ptr的原理 weak ptr 是为了配合 shared ptr 而引入的一种智能指针 它指向一个由 shared ptr 管理的对象而不影响所
  • 神经网络中的激活函数

    一 激活的概念 将输入映射为特定分布的输出 完成非线性变换 多细胞生物神经元的树突接收信息 触发区整合电位 产生神经冲动 末端的突触向下一个神经元传递刺激 以人脑为例 人脑的细胞受刺激产生活动 而刺激的强度需要达到一定的阈值 没有达到阈值的
  • 基于51单片机数字频率计的设计与实现

    目录 第一章 系统原理与总体设计 1 1系统组成 1 2系统原理 1 3测量原理 1 4频率测量与总体设计 第二章 硬件电路设计 2 1硬件电路框图 2 2数字频率计原理图 2 3硬件电路设计 第三章 软件程序设计 3 1程序流程图 3 2
  • 魔方机器人之下位机编程------下位机完整程序

    头文件包含 include Includes h 总头文件 在此添加全局变量定义 uint8 msg 14 Hello World void PWM Init void PWM0 上侧旋转舵机 PWME PWME0 0x00 Disable
  • 查找恢复密钥

    登陆自己的微软账号可查看恢复密钥 点击以下链接查找恢复密钥 https account microsoft com devices recoverykey 根据密钥ID 输入对应的恢复密钥
  • win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙

    win10蓝牙无法连接 可以尝试在此Windows设备上打开蓝牙 笔记本右下角蓝牙图标消失不见 操作步骤 1 首先在打开电脑中 按下 Win R 打开运行窗口输入 services msc 并进入 2 2 打开服务列表后 不断的向下翻 找到
  • 【华为OD机试真题】对称字符串(python)100%通过率 超详细代码注释 代码解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 对称字符串 时间限制 1s空间限制 256MB限定语言 不限 题目描述 对称就是最大的美学
  • 最长公共上升子序列(LCIS)

    前置知识 LCS LIS 注意 刚开始看这个问题的时候 第一反应是先求出LCS再求出LCS的LIS 事实上这是有问题的 我们并不能保证这么求出的LCIS是最长的 比如下面这个例子 Example a 7 1 5 6 4 2 7 b 7 1
  • 【python + opencv + pytorch】车牌提取、分割、识别 pro版

    老规矩 先看最后成果图 如果想要全部工程 文章最后我会把github链接放上 1 分割车牌 2 分割字符 3 识别字符 最终识别的车牌号码是 浙F99999 整个车牌识别分五步 1 一个分割车牌的语义分割模型 2 用训练好DeepLab V
  • 复旦微单片机FM33LG系列之GPIO操作(FL库)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 引用文件 二 快速IO操作指南 1 GPIO位输出高电平 2 GPIO位输出低电平 3 GPIO位输出电平翻转 4 GPIO端口8位并口输出 5 GPIO端口1
  • 数据结构之快速排序算法

    文章目录 快速排序的思想 快速排序的递归实现 快速排序的非递归实现 快速排序的思想 设置两个变量i j 排序开始的时候 令i 0 j length 1 以第一个数组元素作为比较 赋值给temp 即temp nums 0 从j开始向前扫描 找
  • 一篇了解Containerd容器运行时及安装

    文章目录 一 Containerd简介 1 什么是Containerd 2 Containerd和Docker的区别是什么 二 使用yum仓库安装Containerd 三 使用源码安装Containerd 四 配置国内镜像加速地址 一 Co
  • 寻找第K大的数的方法总结

    寻找第K大的数的方法总结 今天看算法分析是 看到一个这样的问题 就是在一堆数据中查找到第k个大的值 名称是 设计一组N个数 确定其中第k个最大值 这是一个选择问题 当然 解决这个问题的方法很多 本人在网上搜索了一番 查找到以下的方式 决定很
  • vscode 跳转到指定的行数的快捷键

    在工作中 尤其是容易产生错误的 js 代码 报错之后会提示有错误代码的位置 也就是在哪一行出问题了 在vscode 编辑器中 可以使用快捷键 跳转到指定的行数 快捷键 Ctrl G 然后在弹出的框中输入行数就可以了
  • 业务风控思考:如何建立识别、防御和决策体系?

    导语 在疫情扰乱生活节奏的三年中 经常会看到企业 降本增效 的话题 如 让员工感受寒气 搬走办公室绿植 降低食堂伙食标准等等 就企业运作成本而言 降低黑灰产 羊毛党 打码平台等 盗夺的有限资源无疑是最有效的降本方式之一 据不完全统计 我国现
  • CSS高级篇——多背景&背景原点

    CSS 提供了很多处理背景的手段 多背景 background image 可以同时设置多个背景图片 background image url this jpg url that gif url theother png 效果如下 back
  • 深度学习-Tensorflow2.2-卷积神经网络{3}-卫星图像识别卷积综合实例(二分类)-13

    import tensorflow as tf import matplotlib pyplot as plt matplotlib inline import numpy as np import pathlib 数据读取及预处理 dat