一、前期作业

本文将采用CNN完成多云、下雨、晴、日出四种气候状况的辨认。较上篇文章,本文为了添加模型的泛化才干,新增了Dropout层并github是干什么的且将最大池化层调整成了均匀池化层。

我的环境:

  • 言语环境:Python3.6.5
  • 编译器:jupyter notebook
  • 深度学习环境:TensorFlow2

来自http署理专栏:【深度学习100例】

1. 设置GPU

假如运用的github是干什么的是CPU能够忽略这步

import tensorflow as tf
gpus = tf.config.list_physicalhttp 404_devices("GPU")
if gpus:
gpu0 = gpus[0]                                        #假如有多个GPU,测验郁闷症仅运用第0个GPU
tf.confgithub中文官网网页ig.experimental.set_测验怀孕的试纸图片一深一浅memory_growth(gpu0, True)  #设置Gpython123渠道登录PU显存用量按需枸杞运用
tf.chttp署理onfig.set_visible_devices([gpu0],"GPU")

2. 导入数据

import matplo测验郁闷程度的问卷tlib.pyp宫颈癌疫苗lot as plt
import os,PIL
# 设置随机种子尽可能使作用能够重现
import numpy as np
np.random.seed(1)
# 设置随机种子尽可能使作用能够重现
import tensorflow as宫崎骏 tf
tf.random.set_seed(1)
from tensorflowpython123渠道登录 import keras
from tePythonnsorflow.keras import layers,models
import pathlib
data_dir = "D:/ju测验你的自卑程度pyter notebook/DL-100-days/datasets/weather_photos/"
data_dir = pathlib.Path(http 500data_dir)

3. 查看数据

数据集总共github分为cloudyrainshinesunrise四类,别离存放于weathttp://192.168.1.1登录her_photos文件夹中以各自姓名命名的子文件夹中。

ipython基础教程mag枸杞e_count = len(list(data_dir.glob('*/*.jpg')))
print("图片总数为:"python123渠道登录,github永久回家地址image_count)
图片总数为: 1125
roses = list(data_dir.glob('sunrise/*.jpg'))
PIL.Image宫颈癌.open(str(roses[0]))

深度学习100例-卷积神经网络(CNN)气候辨认 | 第5天

二、数据预处理

1. 加载数据

运用image_dataset_测验怀孕的试纸图片一深一浅from_dirpython123ectory办法将磁盘中的数据加载到tf.data.Dataset

batch_size = 32
igithub中文官网网页mg_height = 180
img_width = 180
"""
关于image_dataset_from_directory()的具体介绍能够参看文章:https://mtyjkh.blog.csdn.net/article/dgiteeetails/11701878httpwatch9
"""
train测验郁闷症_ds = tf.ke狗狗币ras.preprocessing.image_dataset_from_dihttps和http的区别rectory(
datgithub永久回家地址a_dir,
validation_split=0.2,
subset="training",
seed=123,
imagepython培训班膏火一般多少_size=(img_height, img_width),
batch_size=python基础教程batch_size)
Found 1125python编程 fileshttpwatch belohttp://192.168.1.1登录nginghttpwatch to 4 classes.
Using 900 files for training.python123
"""
关于image_dat公积金aset_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_sizhttp://192.168.1.1登录egithub永久回家地址=batch_size)
Fougit教程nd 1125 files belonging to 4 classes.
Using 225 files for validation.

咱们能够通过class_names输出数据集的标签。标签将按字母次序对应于目录称谓。

class_git教程names = train_ds.class_names
print(测验怀孕的试纸图片一深一浅class_names)
['cloudy', 'rain',httpwatch 'shine', 'sunPythonrise']

2. 可视化数据

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(image测验怀孕的试纸图片一深一浅s[i].numpy().astype("uhttp协议int8"))
plt.title(clasgithub中文官网网页s_names[labels[i]])
plt.axis("off")

深度学习100例-卷积神经网络(CNN)气候辨认 | 第5天

3.宫颈癌疫苗 再次查看数据

for image_batch, labels_batch in train_ds:
print(image_batch.shape)
print(labels_batch.shape)
break
(32, 180, 180, 3)
(32,)git教程
  • Image_batch是形状的张量(32,180,180,3)。这是一批形状180x180x3的32张图片(终究一维指的是彩色通道RGB)。
  • Label_公积金batch是形状(32,)的张量,这些标签对应32张图片

4. 配备数据集

  • shuffle():打乱数据,关于此函数的具体介绍能够参看:zhuanlan.zhihu.com/p/42417456
  • prefetch():预取数据,加快运转

prefe测验郁闷程度的问卷tch()功用具体介绍:CPU 正在预备数据时,加快器处于闲暇状况。相反,当加快器正在练习模型时,CPU 处于闲暇状况。因此,练习所用的时刻是 CPU 预处理时刻和加快器练习时刻的总和。prefetch()将练习进程的预处理和模型实行进程堆叠到一起。当加快器正在实行第 N 个练习步时,Chttp署理PU 正在预备第 N+1http://www.baidu.com 步的数据。这样做不只能够最大极限地缩短练习的单步用时(而不是总用公积金时),而且能够Git缩短提取和转换数据所需的gitlab时刻。假如不运用prefetch(),CPU 和 GPU/TPU 在大部分时刻都处于闲暇状况:

深度学习100例-卷积神经网络(CNN)气候辨认 | 第5天
运用git教程prefetch()可明显减测验少闲暇时刻http 302
深度学习100例-卷积神经网络(CNN)气候辨认 | 第5天

  • cache():将数据集缓存到内存giti轮胎傍边,加快运转
AUTOTUNE = tf.data.AUTOTUNE
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)

三、构建CNN网络

卷积神经网络(CNN)的输入python是什么意思是张量 (Tensor) 办法的 (image_height, imag宫颈癌前期症状e_width, color_channels),包含了图像高度、宽度及色彩信息。不需求输入batch size。coGitlor_channels 为 (R,G,B) 别离对应 RGB 的三个色彩通道(color channel)。在此示例中,咱们的 CNN 输入,fashion_mnist 数据会集的图片,形状是 (28, 2python是什么意思8http 404, 1)即灰度图像。咱们需求在声明第一层时将形状赋值给参数input_shhttp 404ape

num_classe测验郁闷程度的问卷s = 4
"""
关于卷积核的核算不懂的能够参看文章:https://blog.csdn.net/qq_38251616/artic测验你的自卑程度le/details/11427899github是干什么的5
layers.Dropout(0.4) 作用是防止过拟合,龚俊提高模型的泛化才干。
在上一篇文章花朵辨认中,练习准确率与验证准确率相差巨大就是因为模型过拟合导致的
关于Dropout层的更多介绍能够参看文章:httpython怎样读ps://mtyjkh.blog.csdn.net/article/degititails/115826宫颈癌前期症状689
"""
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.Chttp 500onv宫颈癌2D(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()  # 打印网络结构
Model: "sequential"
_github是干什么的________________________________________________________________
Lay龚俊er (type)gitee                 Output Shape              Param #
======================Git==========================github永久回家地址============枸杞=====
rescaling (Rescalipython爬虫ng)        (None, 180, 180, 3)       0
_________________________________________________________github中文官网网页________
conv2d (Conv2D)              (None, 178, 178, 16)      448
_____________________________________________________________Git___测验纸怎样看是否怀孕_
average_pooling2d (AveragePo (None, 89, 89, 16)        0
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 87, 87, 32)        4640
_________________________________________________________________
average_pooling2d_1 (Averag测验用例e (None, 43, 43, 3python是什么意思2)        0
________________枸杞____python能够做什么作业______________龚俊______________测验郁闷症____公积金_____________
conv2d_2 (git指令Conv2D)            (None, 41, 41, 64)        18496
_______测验郁闷症的20道题__________________________________________________________
dropout (Dropouhttp 302t)            (None, 41, 41, 64)        0
______python编程______________httpclient_____________________________________________
flatten (Flatten)            (None, 107584)            0
___________________________________________________测验网速______________
dense (Dense)                (None, 1git指令28)               13770880
_________________________________________________________________
dense_1 (De枸杞nse)              (None, 5)                 645
=================================================================
Total params: 13,795,109
Trainable pargitlabams: 13,795,109
Non-trainabl公积金e params: 0
_________________________________________________________________

四、编译

在预备对模型进行练习之前,http://192.168.1.1登录还需求再对其进行一些设置。以下内容是在模型的编译进程中添加的:

  • 丢掉函数(loss):用于衡量模型在练习期间的准确率。
  • 优化器(optimizer):决定模型怎样依据其看到的数据和自身的丢掉函数进行更新。
  • 方针(metrics):用于监控测验郁闷症的20道题练习和测验进程。以下示例运用了准确率,即被正确分类的图像的比率。
# 设置优化器
opt = tf.kgithuberas.oGitptimizers.Adam(learning_rate=0.001)
model.compile(optimizer=opt,
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])

五、练习模型

epochs =python123渠道登录 10
history = model.fit(
train_ds,
validation_data=val_ds,
epochs测验郁闷症=epochs
)
Epoch 1/10
29/29 [==============================] - 6s 58ms/step - loss: 1.5865 - accuracy: 0.4463 - val_loss: 0.5837 - val_accuracy: 0.7689
Epoch 2/10
29/29 [======================github=http 404=======] - 0s 12ms/step - loss枸杞: 0.52github中文官网网页89 - accurachttp 302y: 0.8295 - val_loss: 0.5405 - val_accurhttp://www.baidu.comacy:宫颈癌疫苗 0.8133
Epoch 3/10
29/29 [==============================] - 0s 12ms/step - loss: 0.2930 - accuracy: 0.8967 - val_loss: 0.5364 - val_accuracy: 0.8000
Epoch 4/10
29/29 [=========================python爬虫=====] - 0s 12ms/step - loss: 0.2742 - accuracy: 0.9074 - val_loss: 0.4034 - val_accuracy:测验纸怎样看是否怀孕 0.8267
Epoch 5/10
29/29 [==============================] - 0s 11ms/step -http 404 loss: 0.1952 - accuracy: 0.9383 - val_loss: 0.387Python4 - val_accuracy: 0.88宫崎骏44
Epoch 6/10
29/29 [==============================] - 0s 11ms/step - loss: 0.1592 - accuracy: 0.9468 - val_loss: 0.3680 - val_accuracy:http://192.168.1.1登录 0.8756
Epoc工商银行h 7/10
29/29 [==============Go================] - 0s 12ms/step - loss: 0.0836 - accuracy: 0.9755 - val_loss: 0.3429 - va宫颈癌前期症状l_accuracy: 0.8756
Epoch 8/10
29/29 [==============================] - 0s 12ms/step - loss: 0.0943 - accuracy: 0.9692 - val_loss: 0.3836 - val_accuracy: 0.9067
Epoch 9/10
29/29 [=======================python培训班膏火一般多少=枸杞=====Python=] - 0sgoogle 12ms/step - loss: 0.034python能够做什么作业4 - accuracy: 0.9909 - val_loss: 0.3578 - val_accuracy: 0.9067Go
Epoch 10/10
29/29 [=================公积金=============] - 0s 11ms/step - loss: 0.0950 - accuracy: 0.9708 - val_loss: 0.4710 - val_accuracy: 0.8356

六、模型点评

acc = history.hpython爬虫istopython能够做什么作业ry['accurgithub是干什么的acy']
val_acc = history.history['valgithub是干什么的_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='Trai测验郁闷程度的问卷ning Accuracy')测验
plt.plot(epochs_range, val_acc, label='Validation Accuracpython编程y')
phttp协议lt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plGot.plot(epocGiths_range, val_loss, lgithubabel='Vpython能够做什么作业alidation Loss')
plt.legend(loc='upper right')
plt.title('Trahttp协议ining and Validation Loss')
plt.show(giti轮胎)

深度学习100例-卷积神经网络(CNN)气候辨认 | 第5天


其他精彩内容:

  • 深度学习100例-卷积神经网络(VGG-19)辨认灵笼中的人物 | 第7天
  • 深度学习100例-卷积神经网络(VGG-16)辨工商银行认海贼王草帽一伙 | 第git教程6天

《深度学习100例》专栏http://192.168.1.1登录直达:【传送门】

考虑:1.最大池化与均匀池化的差异是什么呢?2.学习率是不是越大越好,优化器该怎样设置龚俊呢?

需求数据的同学能够在谈论中留下邮箱