TensorFlow 2.0 - tf.data.Dataset 数据预处理 猫狗分类

文章目录

    • 1 tf.data.Dataset.from_tensor_slices() 数据集建立
    • 2. Dataset.map(f) 数据集预处理
    • 3. Dataset.prefetch() 并行处理
    • 4. for 循环获取数据
    • 5. 例子: 猫狗分类

学习于:简单粗暴 TensorFlow 2

1 tf.data.Dataset.from_tensor_slices() 数据集建立

tf.data.Dataset.from_tensor_slices()

import matplotlib.pyplot as plt
(train_data, train_label), (_, _) = tf.keras.datasets.mnist.load_data()
train_data = np.expand_dims(train_data.astype(np.float32)/255., axis=-1)mnistdata = tf.data.Dataset.from_tensor_slices((train_data, train_label))for img, label in mnistdata:plt.title(label.numpy())plt.imshow(img.numpy())plt.show()

2. Dataset.map(f) 数据集预处理

  • Dataset.map(f) 应用变换
def rotate90(img, label):img = tf.image.rot90(img)return img, labelmnistdata = mnistdata.map(rotate90)

在这里插入图片描述

  • Dataset.batch(batch_size) 分批
mnistdata = mnistdata.batch(5)for img, label in mnistdata:  # img [5,28,28,1],label [5] 包含 5个样本 fig, axs = plt.subplots(1, 5)  # 1 行 5列for i in range(5):axs[i].set_title(label.numpy()[i])axs[i].imshow(img.numpy()[i, :, :, :])plt.show()

  • Dataset.shuffle(buffer_size) 随机打乱
    buffer_size = 1,没有打乱的效果
    数据集较随机,buffer_size 可小一些,否则,设置大一些
    我在做猫狗分类例子的时候,遇到内存不足的报错,建议可以提前打乱数据
# 每次得到的数字不太一样
mnistdata = mnistdata.shuffle(buffer_size=100).batch(5)

3. Dataset.prefetch() 并行处理

  • Dataset.prefetch() 开启预加载数据,使得在 GPU 训练的同时 CPU 可以准备数据
mnistdata = mnistdata.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
# 可设置自动寻找 合适的 buffer_size
  • num_parallel_calls 多核心并行处理
mnistdata = mnistdata.map(map_func=rotate90,num_parallel_calls=2)
# 也可以自动找参数 tf.data.experimental.AUTOTUNE

4. for 循环获取数据

# for 循环
dataset = tf.data.Dataset.from_tensor_slices((A, B, C, ...))
for a, b, c, ... in dataset:# 对张量a, b, c等进行操作,例如送入模型进行训练# 或者 创建迭代器,使用 next() 获取
dataset = tf.data.Dataset.from_tensor_slices((A, B, C, ...))
it = iter(dataset)
a_0, b_0, c_0, ... = next(it)
a_1, b_1, c_1, ... = next(it)

5. 例子: 猫狗分类

项目及数据地址:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/overview

The train folder contains 25,000 images of dogs and cats. Each image in this folder has the label as part of the filename. The test folder contains 12,500 images, named according to a numeric id.

For each image in the test set, you should predict a probability that the image is a dog (1 = dog, 0 = cat).

# ---------cat vs dog-------------
# https://michael.blog.csdn.net/
import tensorflow as tf
import pandas as pd
import numpy as np
import random
import osnum_epochs = 10
batch_size = 32
learning_rate = 1e-4
train_data_dir = "./dogs-vs-cats/train/"
test_data_dir = "./dogs-vs-cats/test/"# 数据处理
def _decode_and_resize(filename, label=None):img_string = tf.io.read_file(filename)img_decoded = tf.image.decode_jpeg(img_string)img_resized = tf.image.resize(img_decoded, [256, 256]) / 255.if label == None:return img_resizedreturn img_resized, label# 使用 tf.data.Dataset 生成数据
def processData(train_filenames, train_labels):train_dataset = tf.data.Dataset.from_tensor_slices((train_filenames, train_labels))train_dataset = train_dataset.map(map_func=_decode_and_resize)# train_dataset = train_dataset.shuffle(buffer_size=25000) # 非常耗内存,不使用train_dataset = train_dataset.batch(batch_size)train_dataset = train_dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)return train_datasetif __name__ == "__main__":# 训练文件路径file_dir = [train_data_dir + filename for filename in os.listdir(train_data_dir)]labels = [0 if filename[0] == 'c' else 1for filename in os.listdir(train_data_dir)]# 打包并打乱f_l = list(zip(file_dir, labels))random.shuffle(f_l)file_dir, labels = zip(*f_l)# 切分训练集,验证集valid_ratio = 0.1idx = int((1 - valid_ratio) * len(file_dir))train_files, valid_files = file_dir[:idx], file_dir[idx:]train_labels, valid_labels = labels[:idx], labels[idx:]# 使用 tf.data.Dataset 生成数据集train_filenames, valid_filenames = tf.constant(train_files), tf.constant(valid_files)train_labels, valid_labels = tf.constant(train_labels), tf.constant(valid_labels)train_dataset = processData(train_filenames, train_labels)valid_dataset = processData(valid_filenames, valid_labels)# 建模 model = tf.keras.Sequential([tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(256, 256, 3)),tf.keras.layers.MaxPooling2D(),tf.keras.layers.Dropout(0.2),tf.keras.layers.Conv2D(64, 5, activation='relu'),tf.keras.layers.MaxPooling2D(),tf.keras.layers.Dropout(0.2),tf.keras.layers.Conv2D(128, 5, activation='relu'),tf.keras.layers.MaxPooling2D(),tf.keras.layers.Dropout(0.2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(2, activation='softmax')])# 模型配置model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=[tf.keras.metrics.sparse_categorical_accuracy])# 训练model.fit(train_dataset, epochs=num_epochs, validation_data=valid_dataset)# 测试 testtest_filenames = tf.constant([test_data_dir + filename for filename in os.listdir(test_data_dir)])test_data = tf.data.Dataset.from_tensor_slices(test_filenames)test_data = test_data.map(map_func=_decode_and_resize)test_data = test_data.batch(batch_size)ans = model.predict(test_data) # ans [12500, 2]prob = ans[:, 1] # dog 的概率# 写入提交文件id = list(range(1, 12501))output = pd.DataFrame({'id': id, 'label': prob})output.to_csv("submission.csv", index=False)

提交成绩:

榜首他人成绩:

  • 把模型改成 MobileNetV2 + FC,训练 2 个 epochs
basemodel = tf.keras.applications.MobileNetV2(input_shape=(256,256,3), include_top=False, classes=2)
model = tf.keras.Sequential([basemodel,tf.keras.layers.Flatten(),tf.keras.layers.Dense(64, activation='relu'),tf.keras.layers.Dense(2, activation='softmax')
])

结果:

704/704 [==============================] - 179s 254ms/step 
- loss: 0.0741 - sparse_categorical_accuracy: 0.9737 
- val_loss: 0.1609 - val_sparse_categorical_accuracy: 0.9744
704/704 [==============================] - 167s 237ms/step 
- loss: 0.0128 - sparse_categorical_accuracy: 0.9955 
- val_loss: 0.0724 - val_sparse_categorical_accuracy: 0.9848

准确率(99%, 98%)比上面第一种模型高(第一种模型大概是训练集 92%, 验证集80%)

测试时,损失值竟然比上面的大,怎么解释?貌似第二种方案也没有过拟合吧,训练集和验证集准确率差不多。

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

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

相关文章

一个使用指针的简单程序

一个使用指针的简单程序 /*一个使用指针的简单程序*/ #include <stdio.h> void main(){ int number 0; //一个出初始化为0的整形变量 int *pointer NULL; //一个可以指向int类型的指针 number 10; printf("\nnumber的地址为:%p",&number); //输出地址…

flutter 图解_【Flutter 专题】83 图解自定义 ACEWave 波浪 Widget (一)

和尚今天尝试一下绘制波浪的效果&#xff0c;虽然 pub 仓库中已经有成熟的插件&#xff0c;但和尚还是准备用之前学习的 Canvas 和 Animation 尝试自定义一个 ACEWave&#xff1b;1. 绘制曲线绘制波浪首先需要绘制曲线&#xff0c;采用 Canvas 绘制贝塞尔曲线&#xff1b;常用的…

c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了

小Hub领读&#xff1a;本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等&#xff0c;文章讲解非常详细&#xff01;作者&#xff1a;静默虚空https://juejin.im/post/5cb6b8f551882532c334bcf2本文已归档到&#xf…

Linux 下用C语言连接 sqlite

1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码&#xff0c;名称为 sql.c&#xff0c;代码如下 // name&#xff1a; sql.c // This prog is used to test C/C API for sqlite3.It is very simple,ha! // Author : zieckey All rights rese…

c2c旅游springboot开源_重量级开源的商城和SpringBoot等项目看看有没有正好是你需要的...

1. JavaGuideGithub地址&#xff1a; 同下star: 18.2k介绍: 【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。2. mallGithub地址&#xff1a; 同下star: 3.3k介绍: mall项目是一套电商系统&#xff0c;包括前台商城系统及后台管理系统&#xff0c;基于Sp…

LintCode 1816. 使结果不超过阈值的最小除数(二分查找)

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold &#xff0c;你需要选择一个正整数作为除数&#xff0c;然后将数组里每个数都除以它&#xff0c;并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…

马里兰大学calce电池循环测试数据集_千次循环,全程1.5V恒压,紫米新一代充电锂电池套装上手体验...

电池应该是每个家庭都会用到的东西&#xff0c;在现在智能家电飞迅发展的当下更是如此&#xff0c;比如智能门锁、智能门铃&#xff0c;都需要电池的供电&#xff0c;才能正常使用。而普通碱电池在电量耗尽后就无法循环使用&#xff0c;所以为了能节省成本减少电池对环境的污染…

几个功能强大的系统源码(机票分销、机票预订、OA、手机充值、wifi营销、网络超市、体检平台)...

1、机票分销、机票预订系统源码 2、OA系统源码 3、手机在线充值系统源码 4、wifi营销系统源码 5、网络超市系统源码 6、在线体检平台系统源码 7、违章查询与缴费系统源码 需要的同学请联系QQ:930948049转载于:https://www.cnblogs.com/bcxz/p/3993157.html

TensorFlow 2.0 - TFRecord存储数据集、@tf.function图执行模式、tf.TensorArray、tf.config分配GPU

文章目录1. TFRecord 格式存储2. tf.function 高性能3. tf.TensorArray 支持计算图特性4. tf.config 分配GPU学习于&#xff1a;简单粗暴 TensorFlow 2 1. TFRecord 格式存储 使用该种格式&#xff0c;更高效地进行大规模的模型训练 import random import os import tensorfl…

c++ qt qlistwidget清空_Qt编写控件属性设计器12-用户属性

一、前言用户属性是后面新增加的一个功能&#xff0c;自定义控件如果采用的Q_PROPERTY修饰的属性&#xff0c;会自动识别到属性栏中&#xff0c;这个一般称为控件属性&#xff0c;在组态设计软件中&#xff0c;光有控件本身的控件属性还是不够的&#xff0c;毕竟这些属性仅仅是…

python计算球坐标系的积分_python – n球面坐标系到笛卡尔坐标系

您可以通过记忆中间产品来加速您的原始代码,即def ct_dynamic(r,alpha):"""alpha: the n-2 values between [0,2\pi)"""x np.zeros(len(alpha) 1)s 1for e,a in enumerate(alpha):x[e] s*np.cos(a)s * np.sin(a)x[len(alpha)] sreturn x*r但…

VC.NET字符指针与String的转换

VC.NET字符指针与String的转换 String ^s; char*ch"wqj"; sgcnew String(ch); textBox2->Texts; 注释&#xff1a;C/CLI中使用gcnew关键字表示在托管堆上分配内存&#xff0c;并且为了与以前的指针区分&#xff0c;用^…

区县政府网站群建设新思路

目前我国区县政府差不多有3000左右&#xff0c;基本上也都建立了自己的门户&#xff0c;但是大部分的门户纯属摆设&#xff0c;没有起到任何的服务功能&#xff0c;还是信息发布为主&#xff0c;背离我国服务型政府的建设方向&#xff0c;国家领导人都很重视信息化发展&#xf…

TensorFlow 2.0 - tf.saved_model.save 模型导出

文章目录1. tf.saved_model.save2. Keras API 模型导出学习于&#xff1a;简单粗暴 TensorFlow 2 1. tf.saved_model.save tf.train.Checkpoint 可以保存和恢复模型中参数的权值导出模型&#xff1a;包含参数的权值&#xff0c;计算图 无须源码即可再次运行模型&#xff0c;适…

机器人动力学与控制_力控制与位置控制的区别

1.背景介绍目前已经广泛落地的力控制方案是在机械臂末端安装多轴力矩传感器&#xff0c;用以检测机械臂对外界环境施加的力反馈值&#xff0c;并配合适当的控制策略&#xff0c;已达到控制机械臂与环境的作用力。这篇文章所要探讨的力控制&#xff08;上述力控制方案&#xff0…

基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...

基坑整体坍塌不亲身经历&#xff0c;不知其恐怖▼前段时间&#xff0c;南宁绿地中央广场房地产项目D号地块(二期)基坑北侧约60米支护桩突然崩塌&#xff01;所幸无人伤亡。深基坑施工安全生产管理要点一、基坑开挖 1、 临边防护(1)基坑施工必须按要求进行&#xff0c;具体临边防…

[转]asp.net导出数据到Excel的三种方法

原文出处&#xff1a;asp.net导出数据到Excel的几种方法(1/3) 、asp.net导出数据到Excel的几种方法(2/3)、asp.net导出数据到Excel的几种方法(3/3) asp.net导出到Excel也是个老生常谈的问题&#xff0c;在此归纳一下。 第一种是比较常用的方法。是利用控件的RenderControl功能…

JS获取浏览器信息及屏幕分辨率

网页可见区域宽&#xff1a;document.body.clientWidth 网页可见区域高&#xff1a;document.body.clientHeight 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线和滚动条的宽) 网页可见区域高&#xff1a;document.body.offsetHeight(包括边线的宽) 网页正文全…

LintCode 378. 将二叉树转换成双链表(非递归遍历)

文章目录1. 题目2. 解题1. 题目 将一个二叉树按照中序遍历转换成双向链表。 样例 样例 1&#xff1a; 输入:4/ \2 5/ \1 3 输出: 1<->2<->3<->4<->5样例 2&#xff1a; 输入:3/ \4 1输出:4<->3<->1https://www.lintcode.com/pro…

js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效

请 点 上面“经络技巧”免费关注每晚9点准时免费更新点击下面图片阅读↓↓↓—— 以下是正文 ——艾灰的妙用1、宝宝经常会有红屁股&#xff0c;做妈妈的当然心疼&#xff0c;用了不少膏啊霜啊油啊&#xff0c;效果也是反反复复&#xff0c;尤其害怕会有依赖性。在妈妈的提醒下…