TensorFlow2.1 模型训练使用

文章目录

  • 1、环境安装搭建
  • 2、神经网络
    • 2.1、解决线性问题
    • 2.2、FAshion MNIST数据集使用
  • 3、卷积神经网络
    • 3.1、卷积神经网络使用
    • 3.2、ImageDataGenerator使用
    • 3.3、猫狗识别案例
    • 3.4、参数优化

1、环境安装搭建

链接: Windows 安装Tensorflow2.1、Pycharm开发环境

2、神经网络

1、传统方式解决问题
在这里插入图片描述
2、机器学习解决方式
在这里插入图片描述
在这里插入图片描述

2.1、解决线性问题

下面通过两组数据推导出公式:
-1.0, 0.0, 1.0, 2.0, 3.0, 4.0
-3.0, -1.0, 1.0, 3.0, 5.0, 7.0
很明显是一个线性问题,y=2x-1,下面我们通过tensorflow来解决这个问题,输入当x=10的时候求y的值?

import tensorflow as tf
from tensorflow import keras
import numpy as npdef tensor_test1():# layers表示的是一层神经元,units表示这一层里面只有一个。input_shape输入值model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])# 指定优化和损失函数model.compile(optimizer='sgd', loss='mean_squared_error')xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)# epochs 表示训练次数model.fit(xs, ys, epochs=500)# y = 2x-1# 通过模型去检测x=10的时候,y等于多少print(model.predict([10.0]))if __name__ == '__main__':tensor_test1()

通过结果可以看出,是一个很接近的值

在这里插入图片描述

2.2、FAshion MNIST数据集使用

在这里插入图片描述

700000张图片
10个类别
28*28
训练神经元网络
通过tensorflow进行模型构建,通过构建出来的模型对图片进行识别

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt# 使用fashion数据集
# 自动终止
# 深度学习是不是训练的次数越多越好呢,不是次数太多会出现一些过拟合问题,就是做的题目都认识,但是新题目不会
# 所以我们需要通过callback来对他进行终止
class myCallbcak(tf.keras.callbacks.Callback):def on_epoch_end(self, epoch, logs={}):if (logs.get('loss') < 0.4):print("\nloss is low so cancelling training!")self.model.stop_training = Truedef tensor_Fashion():callbacks = myCallbcak()fashion_mnist = keras.datasets.fashion_mnist# 训练数据集,每张图片对应的标签   测试用的图片  测试用的标签(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# print(train_images.shape)# plt.imshow(train_images[0])# 构造模型# 构造一个三层结构,第一层用来接收输入,中间层有512个神经元,这个是任意的,最后层,我们要分的类别有10model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(512, activation=tf.nn.relu),keras.layers.Dense(10, activation=tf.nn.softmax)])model.summary()# 归一化,更准确train_images_scaled = train_images / 255.0# 指定优化model.compile(optimizer='adam', loss=tf.losses.sparse_categorical_crossentropy, metrics=['accuracy'])model.fit(train_images_scaled, train_labels, epochs=100, callbacks=[callbacks])test_images_scaled = test_images / 255.0model.evaluate(test_images_scaled, test_labels)# 判断单张图片的属于哪个类别print(model.predict([[test_images[0] / 255]]))# 打印出标签print(np.argmax(model.predict([[test_images[0] / 255]])))print(test_labels[0])

3、卷积神经网络

3.1、卷积神经网络使用

通过卷积神经网络对FAshion MNIST数据集进行训练,得出的准确率比神经网络的更准确,当时也更耗时

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as pltdef convolution_nerve():fashion_mnist = keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# 构造模型model = keras.Sequential([keras.layers.Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)),keras.layers.MaxPooling2D(2, 2),keras.layers.Conv2D(64, (3, 3), activation='relu'),keras.layers.MaxPooling2D(2, 2),keras.layers.Flatten(),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10, activation='softmax')])model.summary()# 归一化train_images_scaled = train_images / 255.0# 指定优化model.compile(optimizer='adam', loss=tf.losses.sparse_categorical_crossentropy, metrics=['accuracy'])model.fit(train_images_scaled.reshape(-1, 28, 28, 1), train_labels, epochs=5)if __name__ == '__main__':convolution_nerve()

模型结构

1层卷积层
输入是2828,过滤器是33,最后会去掉两个像素,所以是2626,64是过滤器,经过第一次卷积就变成64张图片了,(33+1)64=640
2池化层
尺寸减少原来的1/4,长宽各自减去一半
2层卷积层
(3
3*64+1)*64=36928

在这里插入图片描述
第一层卷积层
在这里插入图片描述
max pooling
在这里插入图片描述

3.2、ImageDataGenerator使用

1、 真实数据做处理
2、图片尺寸大小不一,需要裁成一样大小
3、数据量比较大,不能一下载装入内容
4、经常需要修改参数,列入尺寸
使用ImageDataGenerator对图片做处理

from tensorflow.keras.preprocessing.image import ImageDataGenerator# 创建两个数据生成器,指定scaling否为0-1
train_datagen = ImageDataGenerator(rescale=1 / 255)
validation_datagen = ImageDataGenerator(rescale=1 / 255)# 指向训练数据文件夹
train_genrator = train_datagen.flow_from_directory('/',  # 训练数据所在文件夹target_size=(300, 300),  # 指定输出尺寸batch_size=32,  # 每次提取多少class_mode='binary'  # 指定二分类
)validation_genrator = validation_datagen.flow_from_directory('/',  # 训练数据所在文件夹target_size=(300, 300),  # 指定输出尺寸batch_size=32,  # 每次提取多少class_mode='binary'  # 指定二分类
)

3.3、猫狗识别案例

图片资源下载:https://download.csdn.net/download/weixin_45715405/88226536

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
import tensorflow as tf
from tensorflow import keras
import numpy as np
def dogs_cats():base_dir = 'E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs'train_dir = os.path.join(base_dir, 'train')validation_dir = os.path.join(base_dir, 'validation')# 训练集train_cats_dir = os.path.join(train_dir, 'cats')train_dogs_dir = os.path.join(train_dir, 'dogs')# 验证集validation_cats_dir = os.path.join(validation_dir, 'cats')validation_dogs_dir = os.path.join(validation_dir, 'dogs')model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(64, 64, 3)),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')  # 如果是多分类用softmax,2分类用sigmoid就可以了])# 设置损失函数,优化函数model.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['acc'])# 数据预处理# 都进来的数据会被自动转换成tensor(float32)格式,分别准备训练和验证# 图像数据归一化(0-1)区间train_datagen = ImageDataGenerator(rescale=1. / 255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(train_dir,  # 文件夹路径target_size=(64, 64),  # 指定resize的大小batch_size=20,# 如果one-hot就是categorical,二分类用binary就可以class_mode='binary')validation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(64, 64),batch_size=20,class_mode='binary')# 训练网络模型# 直接fit也可以,但是通常不能把所有数据全部放入内存,fit_generator相当于一个生成器,动态产生所需的batch数据# steps_per_epoch相当给定一个停止条件,因为生成器会不断产生batch数据,说白了就是它不知道一个epoch里需要执行多少个stephistory = model.fit_generator(train_generator,steps_per_epoch=100,epochs=5,validation_data=validation_generator,validation_steps=50,verbose=2)

3.4、参数优化

安装

pip3 install keras-tuner
优化之后的参数版本

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters# 创建两个数据生成器,指定scaling否为0-1
# train_datagen = ImageDataGenerator(rescale=1 / 255)
# validation_datagen = ImageDataGenerator(rescale=1 / 255)
#
# # 指向训练数据文件夹
# train_genrator = train_datagen.flow_from_directory(
#     'E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs\\train',  # 训练数据所在文件夹
#     target_size=(300, 300),  # 指定输出尺寸
#     batch_size=32,  # 每次提取多少
#     class_mode='binary'  # 指定二分类
# )
#
# validation_genrator = validation_datagen.flow_from_directory(
#     'E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs\\validation',  # 训练数据所在文件夹
#     target_size=(300, 300),  # 指定输出尺寸
#     batch_size=32,  # 每次提取多少
#     class_mode='binary'  # 指定二分类
# )hp = HyperParameters()def dogs_cats(hp):model = tf.keras.models.Sequential()# values 指定范围model.add(tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0', values=[16, 64], default=16),(3, 3), activation='relu',input_shape=(64, 64, 3)))model.add(tf.keras.layers.MaxPooling2D(2, 2))for i in range(hp.Int('num_conv_layers', 1, 3)):model.add(tf.keras.layers.Conv2D(hp.Choice(f'num_filters_layer{i}', values=[16, 64], default=16), (3, 3),activation='relu'))model.add(tf.keras.layers.MaxPooling2D(2, 2))model.add(tf.keras.layers.Flatten())model.add(tf.keras.layers.Dense(hp.Int('hidde_units', 128, 512, step=32), activation='relu'))model.add(tf.keras.layers.Dense(1, activation='sigmoid'))  # 如果是多分类用softmax,2分类用sigmoid就可以了# 设置损失函数,优化函数model.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['acc'])return modelbase_dir = 'E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')# 训练集
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')# 验证集
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
# 数据预处理
# 都进来的数据会被自动转换成tensor(float32)格式,分别准备训练和验证
# 图像数据归一化(0-1)区间
train_datagen = ImageDataGenerator(rescale=1. / 255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest'
)
test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(train_dir,  # 文件夹路径target_size=(64, 64),  # 指定resize的大小batch_size=20,# 如果one-hot就是categorical,二分类用binary就可以class_mode='binary'
)
validation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(64, 64),batch_size=20,class_mode='binary'
)# 训练网络模型
# 直接fit也可以,但是通常不能把所有数据全部放入内存,fit_generator相当于一个生成器,动态产生所需的batch数据
# steps_per_epoch相当给定一个停止条件,因为生成器会不断产生batch数据,说白了就是它不知道一个epoch里需要执行多少个step
# history = model.fit_generator(
#     train_generator,
#     steps_per_epoch=100,
#     epochs=5,
#     validation_data=validation_generator,
#     validation_steps=50,
#     verbose=2)tuner = Hyperband(dogs_cats,objective='val_acc',max_epochs=15,directory='dog_cats_params',hyperparameters=hp,project_name='my_dog_cat_project'
)
tuner.search(train_generator, epochs=10, validation_data=validation_generator)# 查看参数情况
best_hps = tuner.get_best_hyperparameters(1)[0]
print(best_hps.values)
# 通过参数将模型构建出来
model = tuner.hypermodel.build(best_hps)
model.summary()

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

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

相关文章

【数据结构】堆(Heap)

一、堆的概念及结构 1、概念 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵 完全二叉树的 数组对象。 堆是非线性数据结构&#xff0c;相当于一维数组&#xff0c;有两个直接后继。 如果有一个关键码的集合K { k₀&#xff0c;k₁&#xff0c…

关于openfeign调用时content-type的问题

问题1描述&#xff1a; 今天在A服务使用openfeign调用B服务的时候&#xff0c;发现经常会偶发性报错。错误如下&#xff1a; 情况为偶发&#xff0c;很让人头疼。 两个接口如下&#xff1a; A服务接口&#xff1a; delayReasonApi.test(student);就是使用openfeign调用B服务的…

Python接口自动化之request请求封装

我们在做自动化测试的时候&#xff0c;大家都是希望自己写的代码越简洁越好&#xff0c;代码重复量越少越好。那么&#xff0c;我们可以考虑将request的请求类型&#xff08;如&#xff1a;Get、Post、Delect请求&#xff09;都封装起来。这样&#xff0c;我们在编写用例的时候…

Python文件操作教程,Python文件操作笔记

文件的打开与关闭 想一想&#xff1a; 如果想用word编写一份简历&#xff0c;应该有哪些流程呢&#xff1f; 打开word软件&#xff0c;新建一个word文件写入个人简历信息保存文件关闭word软件 同样&#xff0c;在操作文件的整体过程与使用word编写一份简历的过程是很相似的…

爬虫逆向实战(十三)--某课网登录

一、数据接口分析 主页地址&#xff1a;某课网 1、抓包 通过抓包可以发现登录接口是user/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个password加密参数&#xff0c;还有一个browser_key这个可以写死不需要关心 请求头…

【11】Redis学习笔记 (微软windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此笔记是依托微软开发windows版本学习 一、前言 Redis简介&#xff1a; Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;它也被称为数据结构服务器。Redis以键值对&am…

取证的学习

Volatility命令语法 1.判断镜像信息&#xff0c;获取操作系统类型 Volatility -f xxx.vmem imageinfo 在查到操作系统后如果不确定可以使用以下命令查看 volatility - f xxx.vmem --profile [操作系统] volshell 2.知道操作系统类型后&#xff0c;用–profile指定 volat…

【Oracle 数据库 SQL 语句 】积累1

Oracle 数据库 SQL 语句 1、分组之后再合计2、显示不为空的值 1、分组之后再合计 关键字&#xff1a; grouping sets &#xff08;&#xff08;分组字段1&#xff0c;分组字段2&#xff09;&#xff0c;&#xff08;&#xff09;&#xff09; select sylbdm ,count(sylbmc) a…

DR模式 LVS负载均衡群集

数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和 Re…

Docker 网络

目录 Docker 网络实现原理 Docker 的网络模式&#xff1a; 网络模式详解&#xff1a; 1&#xff0e;host模式 2&#xff0e;container模式 3&#xff0e;none模式 4&#xff0e;bridge模式 5&#xff0e;自定义网络 Docker 网络实现原理 Docker使用Linux桥接&#x…

Linux下如何修改CPU 电源工作模式

最近处理一起历史遗留问题&#xff0c;感觉很爽。 现象&#xff1a; 背景&#xff1a;设备采用ARM&#xff0c;即rk3568处理器&#xff0c;采用Linux系统&#xff1b;主要用于视觉后端处理 现象&#xff1a;当软件运行一段时间&#xff0c;大概1个小时&#xff08;也不是很固定…

考研算法第46天: 字符串转换整数 【字符串,模拟】

题目前置知识 c中的string判空 string Count; Count.empty(); //正确 Count ! null; //错误c中最大最小宏 #include <limits.h>INT_MAX INT_MIN 字符串使用发运算将字符加到字符串末尾 string Count; string str "liuda"; Count str[i]; 题目概况 AC代码…

国内的PMP有多少含金量?

1.PMP是什么 PMP&#xff08;Project Management Professional&#xff09;指项目管理专业人士资格认证。它是由美国项目管理协会&#xff08;PMI&#xff09;举办的项目管理专业人员&#xff08;PMP&#xff09;认证考试&#xff0c;在全球190多个国家和地区推广&#xff0c;…

vue 数字递增(滚动从0到)

使用 html <Incremental :startVal"0" :endVal"1000" :duration"500" />js&#xff1a; import Incremental from /utils/num/numViewjs let lastTime 0 const prefixes webkit moz ms o.split( ) // 各浏览器前缀let requestAnimatio…

[C++] string类的介绍与构造的模拟实现,进来看吧,里面有空调

文章目录 1、string类的出现1.1 C语言中的字符串 2、标准库中的string类2.1 string类 3、string类的常见接口说明及模拟实现3.1 string的常见构造3.2 string的构造函数3.3 string的拷贝构造3.4 string的赋值构造 4、完整代码 1、string类的出现 1.1 C语言中的字符串 C语言中&…

「Qt」文件读写操作

0、引言 我们知道 C 和 C 都提供了文件读写的类库&#xff0c;不过 Qt 也有一套自己的文件读写操作&#xff1b;本文主要介绍 Qt 中进行文件读写操作的类 —— QFile。 1、QFileDialog 文件对话框 一般的桌面应用程序&#xff0c;当我们想要打开一个文件时&#xff0c;通常会弹…

php+echarts实现数据可视化实例

效果&#xff1a; 代码&#xff1a; php <?php include(includes/session.inc); include(includes/SQL_CommonFunctions.inc); ?> <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv&quo…

OpenLayers入门,OpenLayers加载google街景地图

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解OpenLayers加载google街景地图,无需科学上网,也可以正常访问瓦片。 二、依赖和使用 "ol": "^6.15.1"使用npm安装依赖npm install ol@6.15.1使用Yarn安装依赖yarn add olvue中如何使用: vue项…

FastApi-1-结合sql 增/查demo

目录 FastAPI学习记录项目结构部分接口/代码展示感受全部代码 FastAPI学习记录 fastapi已经学习有一段时间&#xff0c;今天抽时间简单整理下。 官网介绍&#xff1a; FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Py…

SpringBoot的配置文件以及日志设置

在使用SpringBoot开发的过程中我们通常会用到配置文件来设置配置信息 以及使用日志来进行记录我们的操作&#xff0c;方便我们对错误的定位 配置文件的作用在于&#xff1a;设置端口&#xff0c;设置数据库连接信息&#xff0c;设置日志等等 在SpringBoot中&#xff0c;配置…