DeepLearn-实现天气的识别

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

本次使用的数据集有晴天、雨天、多云和日出。

导入基本的包 包括读取文件、图像处理、科学计算和tensorflow的api包layers是层模块,提供了神经网络的实现。

import  os,PIL,pathlib
import  matplotlib.pyplot as plt
import  numpy as np
from  tensorflow  import  keras
from tensorflow.keras  import  layers,models
import  tensorflow as tf
//加载数据集
data_dir = "E:\jupyter\weather_photos"data_dir = pathlib.Path(data_dir)image_count = len(list(data_dir.glob('*/*.jpg')))print("图片总数为:",image_count)

割分训练集和验证集 bach_size 是每次训练放进去的数据


batch_size = 32
img_height = 180
img_width = 180
#进行图片的处理  指定数据集路径 、比列、种子德等
train_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="training",seed=123,image_size=(img_height, img_width),batch_size=batch_size)
#这个是验证集
val_ds = tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split=0.2,subset="validation",seed=123,image_size=(img_height, img_width),batch_size=batch_size)

构建卷积神经网络


num_classes = 4#三个卷积层 和两个池化层  通过dropout来防止过渡拟合model = models.Sequential([#将输入图像的像素值从 [0, 255] 重新缩放到 [0, 1] 范围内。1/255 代表每个像素值都会被缩放。layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),layers.Conv2D(16, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), # 卷积层1,卷积核3*3  layers.AveragePooling2D((2, 2)),               # 池化层12*2采样layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3layers.AveragePooling2D((2, 2)),               # 池化层22*2采样layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3layers.Dropout(0.3),                           # 让神经元以一定的概率停止工作,防止过拟合,提高模型的泛化能力。layers.Flatten(),                       # Flatten层,连接卷积层与全连接层layers.Dense(128, activation='relu'),   # 全连接层,特征进一步提取layers.Dense(num_classes)               # 输出层,输出预期结果
])model.summary()  # 打印网络结构
# 设置优化器
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
#编译模型
model.compile(optimizer=opt,loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

进行20轮的模型训练

epochs = 20
history = model.fit(train_ds,validation_data=val_ds,epochs=epochs
)
model.save('pre2.h5')

将准确率和丢失精度可视化

拓展

拿到新的图片,对图片进行预测。

import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
import tensorflow as tf
import os
import pathlib
import PIL# 加载保存的模型
model = load_model('pre2.h5')# 类别名称列表,和之前训练时使用的类别名称保持一致class_names = ['cloudy', 'rain', 'shine', 'sunrise']
# 图像预处理函数,与训练时的预处理保持一致
# def preprocess_image(image_path, img_height, img_width):
#     img = image.load_img(image_path, target_size=(img_height, img_width))  # 调整图像大小
#     img_array = image.img_to_array(img)                                    # 将图像转换为 NumPy 数组
#     img_array = np.expand_dims(img_array, axis=0)                          # 增加一维,作为批次输入
#     img_array = img_array / 255.0                                          # 缩放到 [0, 1] 区间
#     return img_array
def preprocess_image(image_path, img_height, img_width):img = image.load_img(image_path, target_size=(img_height, img_width))  # 调整图像大小img_array = image.img_to_array(img)                                    # 转换为NumPy数组img_array = np.expand_dims(img_array, axis=0)                          # 增加一维,作为批次输入return img_array# 预测函数
def predict_image(model, image_path, img_height, img_width, class_names):img_array = preprocess_image(image_path, img_height, img_width)        # 预处理图像predictions = model.predict(img_array)                                 # 使用模型进行预测predicted_class = np.argmax(predictions[0])                            # 获取预测类别索引predicted_class_name = class_names[predicted_class]                    # 获取类别名称confidence = np.max(predictions[0])                                    # 获取预测置信度return predicted_class_name, confidence# 定义图像大小,保持与模型训练时一致
img_height = 180
img_width = 180# 指定要预测的图像路径
image_path = '日出.jpg'  # 替换为你要预测的图像路径# 使用模型进行预测
predicted_class_name, confidence = predict_image(model, image_path, img_height, img_width, class_names)# 打印预测结果
print(f"Predicted class: {predicted_class_name} with confidence: {confidence:.2f}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[实时计算flink]安全访问最佳实践

由于Flink无法提前预知您要使用的上下游系统,当作业需要访问不同的上下游系统来读写数据时,可能需要使用您的AccessKey信息作为访问凭证。主账号的AccessKey具备云账号下资源的全部权限,一旦泄露可能会造成严重后果。本文通过对RAM用户授予相…

pycharm与anaconda下的pyside6的安装记录

一、打开anaconda虚拟环境的命令行窗口,pip install,加入清华源: pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple 二、打开pycharm,在文件--设置--工具--外部工具中配置一下三项: 1、 QtDesigner…

Java常用任务调度

JAVA 任务调度技术 前言 在日常开发过程中,我们经常会遇到周期性执行某段代码的场景。比如定期同步订单,定期更新商品信息,定期发送消息等。这些重复执行的代码可以抽象为一个任务(Task)。 一个Task的特点如下: 包含需要执行的业…

将多个commit合并成一个commit并提交

0 Preface/foreword 1 压缩多个commit方法 1.1 git merge --squash 主分支:main 开发分支:test 当前在test分支提交了8个commits,功能已经开发完成,需要将test分支合并到main分支,但是不想在合并时候,看…

开源一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码

大家好,我是一颗甜苞谷,今天分享一款基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码。 前言 在当今快速发展的商业环境中,库存管理对于企业来说至关重要。然而,许多企业仍然依赖于传统的、手动…

【Rust】环境搭建

▒ 目录 ▒ 🛫 导读需求 1️⃣ 安装Chocolatey安装依赖 2️⃣ 安装RustRover安装toolchain(rustup、VS)重启配置生效设置安装插件 📖 参考资料 🛫 导读 需求 重装系统,记录下环境搭建遇到的问题。 1️⃣ …

安装Ubuntu系统

打开vmware,新建一个Ubuntu虚拟机,点击自定义,进入下一步 ,选择Workstation 17.x后,点击下一步 选择稍后安装系统选项,进入选择客户机操作系统页面,客户机操作系统选择Linux,版本选…

rom定制系列------红米note8_miui14安卓13定制修改固件 带面具root权限 刷写以及界面预览

💝💝💝红米note8机型代码:ginkgo。高通芯片。此固件官方最终版为稳定版12.5.5安卓11的版本。目前很多工作室需要高安卓版本的固件来适应他们的软件。并且需要root权限。根据客户要求。修改固件为完全root。并且修改为可批量刷写的…

了解一下,RN中怎么加载 threejs的

在React Native(RN)中加载和使用Three.js,一个流行的3D图形库,通常需要一些额外的步骤,因为Three.js主要是为Web浏览器设计的,而React Native则使用原生的渲染引擎。不过,有一些方法可以在React…

电脑仅一个C盘如何重装系统?超简单教程分享!

当我们的电脑仅配备一个C盘时,重装系统的过程可能会显得尤为棘手。因为一旦格式化硬盘,安装系统的分区也可能被一并清除,导致安装过程中断。这时候我们完全可以通过对电脑进行分区来解决这一问题。分区不仅能够帮助我们更好地管理硬盘空间&am…

提升网站速度与性能优化的有效策略与实践

内容概要 在数字化快速发展的今天,网站速度与性能优化显得尤为重要,它直接影响用户的浏览体验。用户在访问网站时,往往希望能够迅速获取信息,若加载时间过长,轻易可能导致他们转向其他更为流畅的网站。因此&#xff0…

流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(二)

继续上篇介绍,本篇介绍一下封装RTP的数据格式,如何将摄像头采集的码流,音频的码流,封装到rtp里,传输。 有自己私有协议例子,有rtp协议,参考代码。注意不是rtsp协议。 一、私有协议 玩过tcp协议…

构建灵活、高效的HTTP/1.1应用:探索h11库

文章目录 构建灵活、高效的HTTP/1.1应用:探索h11库背景这个库是什么?如何安装这个库?库函数使用方法使用场景常见的Bug及解决方案总结 构建灵活、高效的HTTP/1.1应用:探索h11库 背景 在现代网络应用中,HTTP协议是基础…

利用游戏引擎的优势

大家好,我是小蜗牛。 在当今快速发展的游戏产业中,选择合适的游戏引擎对开发者来说至关重要。Cocos Creator作为一款功能强大且灵活的游戏引擎,为开发者提供了丰富的工具和资源,使他们能够高效地开发出优秀的游戏。本文将探讨如何…

TensorFlow面试整理-分布式

在深度学习的训练过程中,随着数据量和模型的复杂性增加,单个 GPU 或 CPU 无法满足高效训练的需求。TensorFlow 提供了强大的 分布式训练 功能,通过并行处理加速训练过程。分布式训练可以在多个 GPU、多个机器甚至是 TPU 上运行。以下是分布式训练的关键概念及其使用方法。 1…

仓颉编程语言官网正式上线 !首个公测版本开放下载 !

今年6月21日,华为开发者大会(HDC)正式公开介绍了华为自研的通用编程语言:仓颉编程语言,并发布了HarmonyOS NEXT仓颉语言开发者预览版,开发者可以使用仓颉开发鸿蒙原生应用。4个月以来,仓颉编程语…

PHP爬虫的奇幻之旅:如何用代码“偷窥”京东商品的SKU信息

开篇:代码界的007 想象一下,你是一名代码界的007,你的任务是潜入京东的数据库,获取商品的SKU信息。不过别担心,我们不是真的去偷数据,而是用PHP编写一个爬虫,合法地获取公开的API数据。这不仅是…

C++初阶(七)--类和对象(4)

目录 ​编辑 一、再谈构造函数 1.构造函数体赋值 2.初始化列表 二、类型转换 1.隐式类型转换 2.explicit关键字 3.类类型之间的对象隐式转换 三、static成员函数 1.概念 2.特性 3.面试题: 四、友元函数 1.基本介绍 2.回顾: 3.友元类&am…

【问题记录】当机器人存在多个串口需要绑定时udevadm的作用

一、正常绑定 输入sudo udevadm info -a /dev/ttyUSBx | grep KERNELS 命令 会出现KERNELS的编号,记录编号。 修改规则文件/etc/udev/rules.d/99-usb.rules 添加以下命令 KERNEL"ttyUSB*", KERNELS"2-1.2:1.0", MODE:"0666", GROU…

kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

大家好,我是锋哥。今天分享关于【kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?】面试题?希望对大家有帮助; kafka 分布式(不是单机)的情况下,如何保证消息的…