Tensorflow入门实战 P03-天气识别

目录

1、完整代码

2、运行结果

2.1 查看20张图片

2.2 程序运行

2.3 运行结果

3、小结

① 代码运行过程中有报错:

② 修改代码如下:

③ 分析原因:


  • 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制

​​​​​本篇文章中,使用的天气数据集,还是之前pytorch里面用的数据集,只是更换了使用的语言为tensorflow。

1、完整代码

import tensorflow as tf
import os,  pathlib
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from tensorflow import keras
from keras import layers,modelsgpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0]        # 如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True)  # 设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0], "GPU")# 导入数据
data_dir = "/Users/MsLiang/Documents/mySelf_project/pythonProject_pytorch/learn_demo/P_model/p03_weather/weather_photos"
data_dir = pathlib.Path(data_dir)
# 查看数据
image_count = len(list(data_dir.glob('*/*.jpg')))
print('图片总数为:', image_count)roses = list(data_dir.glob('sunrise/*.jpg'))
print(roses[0])
im = Image.open(str(roses[0])).convert('RGB')
# im.show()   # 显示图片# 数据预处理
# 1、加载数据
batch_size = 32
img_height = 180
img_width = 180
"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789
"""
# 训练数据
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)"""
关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789
"""
# 验证数据
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)# 我们可以通过class_names 输出数据集的标签。标签将按照字母对应于目录名称。
class_names = train_ds.class_names
print('标签名称:', class_names)   # ['cloudy', 'rain', 'shine', 'sunrise']# 可视化数据
plt.figure(figsize=(20, 10))for images, labels in train_ds.take(1):for i in range(20):ax = plt.subplot(5, 10, i + 1)plt.imshow(images[i].numpy().astype("uint8"))plt.title(class_names[labels[i]])plt.axis("off")# 再次检查数据
for image_batch, labels_batch in train_ds:print(image_batch.shape)   # (32, 180, 180, 3)print(labels.shape)  # (32,)break# 配置数据集
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)   # 训练集
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)  # 验证集# 构建卷积神经网络
num_classes = 4"""
关于卷积核的计算不懂的可以参考文章:https://blog.csdn.net/qq_38251616/article/details/114278995layers.Dropout(0.4) 作用是防止过拟合,提高模型的泛化能力。
在上一篇文章花朵识别中,训练准确率与验证准确率相差巨大就是由于模型过拟合导致的关于Dropout层的更多介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/115826689
"""model = models.Sequential([keras.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*3layers.AveragePooling2D((2, 2)),  # 池化层1,2*2采样layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3layers.AveragePooling2D((2, 2)),  # 池化层2,2*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'])# 训练模型
epochs = 10history = model.fit(train_ds,validation_data=val_ds,epochs=epochs
)# 模型评估
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']loss = history.history['loss']
val_loss = history.history['val_loss']epochs_range = range(epochs)plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

2、运行结果

2.1 查看20张图片

2.2 程序运行

2.3 运行结果

3、小结

① 代码运行过程中有报错:

AttributeError: module 'keras.layers' has no attribute 'experimental'

② 修改代码如下:

③ 分析原因:

出现上述问题是因为Keras的版本所导致的

新版本的keras中,keras.layers.experimental 已经被移除了。

方法1:更新keras版本

方法2:

import tensorflow as tf
from tensorflow import keras# 使用tf.keras替代keras
if hasattr(keras.layers,"experimental"):keras.backend.clear_session()from tensorflow.keras import layers
else:from keras import layers

上述代码会检测你的Keras版本是否含有keras.layers.experimental 模块,如果有则清除当前session,然后导入tensorflow.keras.layers 模块。如果没有,则导入keras.layers 模块。通过这样的方式,就可以避免使用keras.layers.experimental 模块而引发的错误。

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

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

相关文章

STM32H750启动和内存优化(分散加载修改)

前些日子有个朋友一直给我推荐STM32H750这款芯片,说它的性价比,说它多么多么好。于是乎,这两天试了试,嚯,真香!我们先看看基本配置 这里简单总结下,cortex-m7内核,128k片内flash …

k8s挂载配置文件(通过ConfigMap方式)

一、ConfigMap简介 K8s中的ConfigMap是一种用于存储配置数据的API对象,属于Kubernetes中的核心对象。它用于将应用程序的配置信息与容器镜像分离,以便在不重新构建镜像的情况下进行配置的修改和更新。ConfigMap可以存储键值对、文本文件或者以特定格式组…

[Vue-常见错误]浏览器显示Uncaught runtime errors

文章目录 错误描述正确写法具体如下 错误描述 当前端代码发生错误时,浏览器中出现以下错误提示。 正确写法 显然这不是我们所期望的,在vue.config.js中配置如下设置关闭Uncaught runtime errors显示 devServer: {client: {overlay: false}具体如下 …

UltraEditUEStudio软件最新版下载及详细安装教程

UEStudio简介: UEStudio建立在上文本编辑器UltraEdit的功能基础上,并为团队和开发人员提供了其他功能,例如深度Git集成。您可以直接在UEStudio中克隆,签出,更新,提交,推入/拉入等操作&#xff…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第37课-自动切换纹理

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第37课-自动切换纹理 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

后台管理系统排序混乱,分页出现重复条例

检查了接口和请求参数都没有问题。 查询数据库发现是排序字段create_time 都相同导致的。没有区分度。 解决方案 按照唯一id排序 避免create_time 大批量相同 order by create_time ,xxx 两个排序字段

Python第二语言(五、Python文件相关操作)

目录 1. 文件编码的概念 2. 文件的读取操作 2.1 什么是文件 2.2 open()打开函数 2.3 mode常用的三种基础访问模式 2.4 文件操作及案例 3. 文件的写入操作及刷新文件:write与flush 4. 文件的追加操作 5. 文件操作的综合案例(文件备份操作&#x…

推荐4个好用有趣的软件

MyComic——漫画聚合软件 MyComic是一款界面简洁、分类详尽的漫画阅读软件,专为动漫爱好者设计。它提供了丰富的高清漫画资源,支持在线免费阅读,并且可以一键下载到书架,方便随时离线观看,节省流量。用户可以轻松找到喜…

Java多线程-初阶1

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1. 认识线程(Thread) 1.线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代…

Linux——信号

目录 一关于信号 二信号概念 三信号产生 四信号处理 1核心转储 2信号的其它常见概念 3函数实现 五信号捕捉 1捕捉流程 2内核态与用户态 2.1再谈地址空间 2.2键盘输入数据 2.3OS的运行过程 3函数实现 六其它问题 1可重入函数 2.volatile 3SIGCHLD 一关于信号 …

小程序中实现自定义头部导航组件

在页面中实现自定义头部导航的组件,如果仅是单个页面中需要自定义可在页面的json文件中配置"navigationStyle": “custom”,如果是项目中所有页面都想使用自定义的组件,可在app.json的window中全局配置"navigationStyle"…

构建第一个ArkTS应用之@卡片事件能力说明

ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互,当前支持router、message和call三种类型的事件,仅在卡片中可以调用。 接口定义:postCardAction(component: Object, action: Object): void 接口参数说明&#xff1…

再读高考作文题

新课标I卷:讨论了随着互联网和人工智能的普及,问题是否会变得越来越少,要求考生写一篇文章,表达自己对于这一现象的联想和思考。 从来就没有什么救世主 AI也不是​​​​​ 一直不会写作文,直到高中,才堪堪…

代码随想录算法训练营第二十三天

题目:39. 组合总和 这道题目和组合差不多 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制 还有就是重复的如何进行剔除的方法如何实现 其实出现这个问题是因为没有理解startIndex的作用 详细看视频的 4分钟开始的地方…

易于上手的requests

Python中的requests库主要用于发送HTTP请求并获取响应结果。在现代网络编程中,HTTP请求是构建客户端与服务器之间通信的基础。Python作为一种高级编程语言,其丰富的库支持使得它在网络数据处理领域尤为突出。其中,requests库以其简洁、易用的…

【ArcGIS微课1000例】0117:ArcGIS中如何将kml(kmz)文件转json(geojson)?

文章目录 一、kml获取方式二、kml转图层三、图层转json一、kml获取方式 kml文件是一种很常用的数据格式,可以从谷歌地球(googleearth)获取某一个地区的kml范围文件,如青海湖(做好的kml文件可以从配套实验数据包0117.rar中获取)。 二、kml转图层 打开【KML转图层】工具,…

在Java中使用SeleniumAPI,超详细

Java中 Selenium相关操作 1 定位元素 1.1 css选择器定位元素 就是定位到页面的元素,本质上就是一个一个的语法 下面举几个具体的例子: 类选择器 按照给定的 class 属性的值,选择所有匹配的元素。 语法:.classname 例子&am…

Java Web学习笔记30——打包部署

打包: 到资源管理器中再看下: 将这些文件压缩成一个zip文件,然后到nginx的html目录中执行unzip 解压即可。 部署: Nginx:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代…

C语言详解(联合和枚举)

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥个人主页:奋斗的小羊 💥所属专栏:C语言 🚀本系列文章为个人学习笔记,在这里撰写…

陆面生态水文模拟与多源遥感数据同化技术

原文链接:陆面生态水文模拟与多源遥感数据同化技术 了解陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用;熟悉模 型的发展历程,常见模型及各自特点;理解Noah-MP模型的原理,掌握Noah-MP 模型在单 站和区域的模拟、模拟结果的…