>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/AtyZUu_j2k_ScNH6e732ow) 内部限免文章(版权归 *K同学啊* 所有)**
>- 参考文章地址: [🔗深度学习100例-卷积神经网络(CNN)天气识别 | 第5天](https://mtyjkh.blog.csdn.net/article/details/117186183)
导入数据
## 导入相关的库
import os,PIL,pathlib
import matplotlib.pyplot as plt
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers,models
data_dir = r'C:\Users\tensorflow\T3\data\weather_photos' # 这里需要修改为你数据存放的地址
data_dir = pathlib.Path(data_dir)
roses = list(data_dir.glob('*/*.jpg'))
PIL.Image.open(str(roses[0]))
pathlib
是 Python 3.4 版本中引入的标准库,提供了一种面向对象的方式来操作文件系统路径。它简化了路径的构造和操作等任务,并且跨平台兼容性良好。
可以使用 pathlib
完成以下任务:
- 构造一个文件或目录的路径
- 检查路径是否存在,是文件还是目录
- 获取路径的属性,如大小、创建时间、访问时间等
- 遍历目录及其中的文件和子目录
- 创建、删除、重命名文件或目录
pathlib
主要有以下几个类:
Path
:主要用于表示文件系统路径,可以通过字符串初始化。PurePath
:与Path
类似,但是只表示路径,不涉及具体文件系统操作。PosixPath
和WindowsPath
:继承自Path
,分别用于 POSIX 和 Windows 文件系统。
神经网络
num_classes = 4
model = models.Sequential([
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)), # 池化层1,2*2采样
layers.Conv2D(32, (3, 3), activation='relu'), # 卷积层2,卷积核3*3 layers.AveragePooling2D((2, 2)), # 池化层2,2*2采样
layers.Conv2D(64, (3, 3), activation='relu'), # 卷积层3,卷积核3*3
layers.Dropout(0.3), # 让神经元以一定的概率停止工作,防止过拟合,提高模型的泛化能力。 layers.Flatten(), # Flatten层,连接卷积层与全连接层
layers.Dense(128, activation='relu'), # 全连接层,特征进一步提取
layers.Dense(num_classes) # 输出层,输出预期结果 ])
model.summary() # 打印网络结构
训练效果
深度学习数据集是越庞大越好吗?
在深度学习中,数据集的大小通常是越大越好,因为更多的数据可以提供更多的信息和样本,有助于模型更准确地捕捉数据之间的关系,并提高模型的泛化能力。具体来说,数据集越大,可以带来以下好处:
-
更好的泛化能力:更大的数据集可以提供更多的训练样本,使得模型可以更好地学习数据中的模式和关系,从而提高其泛化能力。
-
更低的过拟合风险:更大的数据集可以降低模型过拟合的风险,特别是当模型参数数量很大时。通过提供更多的样本,可以减少模型对噪声和不相关特征的依赖,使其更专注于真正与目标相关的特征。
-
更准确的评估:更大的数据集可以提供更准确的模型评估,因为更多的样本可以更好地反映模型的性能和偏差。
但是,数据集大小并不是唯一的影响因素。除了数据集大小之外,数据质量、数据平衡、数据的多样性等因素也会影响模型的性能。另外,更大的数据集也需要更多的计算资源和时间来处理。因此,需要在数据集大小、数据质量和计算资源之间进行权衡。