不同天气状况识别

活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

创作计划

**
1,机缘

A,分享创作经验
B,学习TensorFlow
C,熟悉Python

2,收获

A,获得了10粉丝的关注
B,获得了20多赞、阅读量
C,认识了TensorFlow同行

3,日常

  1. 创作已经是我学习的一部分
  2. 制定创作计划,例如,每周二、四、六晚写博客。其余时间学习

4,憧憬

创作规划是最近学习TensorFlow编程基本流程,从识别文字到图片。再到实现自己的机器学习模型。

**

学习计划

**
1,学习目标

这几天掌握 TensorFlow入门知识,安装,运行,常见错误处理。

2,学习内容

A,搭建 TensorFlow开发环境
B,掌握 TensorFlow 基本语法
C,掌握加载数据集的方法
D,掌握查看数据集的方法

3,学习时间

周一至周五晚上6 点—晚上9点
周六下午 6 点-下午 9 点
周日下午 6 点-下午 9 点

4,学习产出

技术笔记 1 遍
查看CSDN技术博客 10 篇
学习的 视频 2个

**

学习日记

**
1,学习知识点

TensorFlow加载、导入数据集,设置验证集、测试集,查看数据集,训练等

2,学习遇到的问题

matplotlib的使用,pathlib如何选择图片问题,TensorFlow提高读取性能的方法

3,学习的收获

学会了如何使用TensorFlow运行机器学习,TensorFlow运行的基本流程。什么是卷积神经网络,如何卷积。构建卷积神经网络的过程。

4,实操

import matplotlib.pyplot as plt
import os,PIL
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers,models
import pathlib


data_dir = "D:/BaiduNetdiskDownload/weather_photos"
#为调用Path的glob函数
data_dir = pathlib.Path(data_dir)
image_count = len(list(data_dir.glob('*/*.jpg')))
print("图片总数为:",image_count)
#查看图片
rises = list(data_dir.glob('sunrise/*.jpg'))
PIL.Image.open(str(rises[0])).show()
#数据预处理
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)
class_names = train_ds.class_names
print(class_names)
#数据可视化
plt.figure(figsize=(20, 10))  #指定figure的宽和高

for images, labels in train_ds.take(1):
    for i in range(25):
        ax = plt.subplot(5, 5, i + 1) #指的是在一个5行5列共25个子图的图中,定位第i个图来进行操作。

        plt.imshow(images[i].numpy().astype("uint8"))
        plt.title(class_names[labels[i]])

        plt.axis("off")
plt.show()

for image_batch, labels_batch in train_ds:
    print(image_batch.shape)
    print(labels_batch.shape)
    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
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)),  # 卷积层
    layers.AveragePooling2D((2, 2)),  # 池化层
    layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层
    layers.AveragePooling2D((2, 2)),  # 池化层
    layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层
    layers.Dropout(0.3),
# Flatten层
    layers.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 = 10

history = 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()

运行结果:
请添加图片描述
可以看到模型在训练集上表现得好,在验证集上表现得不好,说明出现了过拟合。使用layers.Dropout(0.3) 消除一些神经元可以减少过拟合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值