Tensorflow2如何读取自制数据集并训练模型?-- Tensorflow自学笔记13

news2024/9/24 23:52:02

一. 如何自制数据集?

1. 目录结构

以下是自制数据集-手写数字集, 保存在目录 mnist_image_label 下

2. 数据存储格式 

2.1. 目录mnist_train_jpeg_60000 下存放的是 60000张用于测试的手写数字

       如 : 0_5.jpg, 表示编号为0,标签为5的图片

              6_1.jpg, 表示编号为6,标签为1的图片

2.2. 目录mnist_test_jpeg_10000 下存放的是10000张用于测试的手写数字

        图片存储格式与1.1相同

2.3. txt文件 mnist_train_jpg_60000.txt,里面存放的是

     

        比如,第一行  28755_0.jpg   0     前面表示图片名称,后面的0表示该图片对应的标签,这里表示该图片是手写数字0.

2.4. txt文件 mnist_test_jpg_10000.txt   , 存放的是测试数据集的标签

二. 如何读取自制数据集并输入神经网络

以下是test.py 如何读取自制数据集代码

1. 导入需要的库

import tensorflow as tf

 from PIL import Image

import numpy as np

import os

2.设置数据集所在文件目录 

   (test.py, 需和mnist_image_label 目录在同一级目录下)

train_path = './mnist_image_label/mnist_train_jpg_60000/'

train_txt = './mnist_image_label/mnist_train_jpg_60000.txt'

x_train_savepath = './mnist_image_label/mnist_x_train.npy'

y_train_savepath = './mnist_image_label/mnist_y_train.npy'

test_path = './mnist_image_label/mnist_test_jpg_10000/'

test_txt = 'v/mnist_image_label/mnist_test_jpg_10000.txt'

x_test_savepath = './mnist_image_label/mnist_x_test.npy' #训练集输入特征存储文件npy,

y_test_savepath = './mnist_image_label/mnist_y_test.npy' #训练集标签存储文件

3.定义读取数据的函数

def generateds(path, txt):

    f = open(txt, 'r') # 以只读形式打开txt文件

    contents = f.readlines() # 读取文件中所有行

    f.close() # 关闭txt文件

    x, y_ = [], [] # 建立空列表

    for content in contents: # 逐行取出

        value = content.split() # 以空格分开,图片路径为value[0] , 标签为value[1] , 存入列表

        img_path = path + value[0] # 拼出图片路径和文件名

        print('image path....: '+img_path)

        img = Image.open(img_path) # 读入图片

        img = np.array(img.convert('L')) # 图片变为8位宽灰度值的np.array格式

        img = img / 255. # 数据归一化 (实现预处理)

        x.append(img) # 归一化后的数据,贴到列表x

        y_.append(value[1]) # 标签贴到列表y_

        print('loading : ' + content) # 打印状态提示



    x = np.array(x) # 变为np.array格式

    y_ = np.array(y_) # 变为np.array格式

    y_ = y_.astype(np.int64) # 变为64位整型

    return x, y_ # 返回输入特征x,返回标签y_


4.调用定义的函数

if os.path.exists(x_train_savepath) and os.path.exists(y_train_savepath) and os.path.exists(

x_test_savepath) and os.path.exists(y_test_savepath):

    print('-------------Load Datasets-----------------')

    x_train_save = np.load(x_train_savepath)

    y_train = np.load(y_train_savepath)

    x_test_save = np.load(x_test_savepath)

    y_test = np.load(y_test_savepath)

    x_train = np.reshape(x_train_save, (len(x_train_save), 28, 28))

    x_test = np.reshape(x_test_save, (len(x_test_save), 28, 28))

else:

    print('-------------Generate Datasets-----------------')

    x_train, y_train = generateds(train_path, train_txt)

    x_test, y_test = generateds(test_path, test_txt)



    print('-------------Save Datasets-----------------')

    x_train_save = np.reshape(x_train, (len(x_train), -1))

    x_test_save = np.reshape(x_test, (len(x_test), -1))

    np.save(x_train_savepath, x_train_save)

    np.save(y_train_savepath, y_train)

    np.save(x_test_savepath, x_test_save)

    np.save(y_test_savepath, y_test)

5. 搭建神经网络训练数据

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

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

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

相关文章

DGV结构变异数据库下载及bedToBigBed+bigBedToBed转换

DGV结构变异数据库通常用来过滤检测的CNV、Indels等结构变异信息,以达到去除假阳性的目的。 下载的bedToBigBed和bigBedToBed为二进制程序,已编译好,可以直接使用。 1. 基础软件和文件下载 # bedToBigBed下载 wget http://hgdownload.soe.…

PMP--一、二、三模--分类--14.敏捷--技巧--DoDDoR

文章目录 技巧DoD&DoR 二模14.敏捷--术语表--完成的定义DoD--Definition of Done--是指一个项目什么时候可以被认为是“完成”的标准,它可以包括各种质量和功能的具体要求。--它是团队需要满足的所有标准的核对单,只有可交付成果满足该核对单才能视为…

OPENAIGC开发者大赛企业组特等奖 | 集思科技-大品牌的AI直播团队产品提供商

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

基于java+SpringBoot+Vue的教师工作量管理系统设计与实现

基于javaSpringBootVue的教师工作量管理系统设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台展示 前台展示模块主要面向教师用户,提供个人中心、课程信息管理、工作量管理等功能。教师可以查看自己…

如何更改磁盘卷标名称?

磁盘卷标(Volume Label)是用来标识和管理磁盘驱动器的名称,通常在文件资源管理器中显示。卷标有助于用户快速识别和区分不同的磁盘或分区。 为什么要更改磁盘卷标名称? 磁盘卷标作为磁盘的名字,可以帮助用户更容易地识…

YOLOv8改进 | 模块缝合 | C2f 融合RVB + EMA注意力机制【二次融合 + 结构图】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

我用「天工」给80后大叔做了节 AI 启蒙课

接连两天都是乌蒙蒙的,时不时也会下点淅淅沥沥的小雨。 一个十分要好的80后大叔频繁与我诉苦,最近他感觉要失业了,由于他所处的行业不景气,公司的业务频频下滑,这已经是半年里的第二次降薪了,很焦虑&#…

bat批处理无法显示中文或中文乱码解决办法

在BAT脚本中出现乱码的原因可能有以下几种情况: 编码格式错误:如果脚本文件的编码格式与操作系统或文本编辑器不兼容,就会导致乱码。可以尝试将脚本文件的编码格式改为ANSI、UTF-8或UTF-8 with BOM格式,然后重新保存并运行。假设…

解决Intel AC3160无线网卡 WIN11系统无法连接WIFI6路由器问题

这个网卡比较老了,支持不了wifi6的路由器,win7官方驱动没有更新到可以支持wifi6路由器的,导致有些网络搜索不到。所以要自己去更新驱动 驱动地址:https://driverpack.io/zh-cn/devices/wifi/intel/intel-r-dual-band-wireless-ac…

充分利用您的注册表单

建立受众群体一直是企业发展的重要组成部分,但近年来,如何通过定期发送内容邮件来保持受众的参与变得愈加重要。 在你开始为那个私人频道策划内容之前,需要让客户注册并同意深化你们之间的关系,这时注册表单优化就变得至关重要。…

LINUX操作基础+LINUX系统的文件操作命令

1、使用shutdown命令设定在800分钟之后关闭计算机。 sudo shutdown 800 2、分别使用命令man和help查看ls命令的帮助文档。 man ls ls --help 3、使用命令将当前计算机的主机名显示为IT。 sudo hostname IT 4、使用命令显示公元2024年8月的月历。 cal 08 2024 5、显示当前计…

【SQL笔试题】SN_1 连续登陆系列问题

简介 连续登陆天数场景描述是对一个特定情境或活动连续发生的天数进行详细的阐述。这种描述通常用于展示某个事件或活动的持续时间,以及它对参与者或环境产生的影响。 常见的应用场景: 用户留存分析:通过跟踪用户的连续登录天数&#xff0…

新华三H3CNE网络工程师认证—DHCP基本原理

DHCP报文交互一共有四个报文,分别是Discover、Offer、Request和Ack。DHCP Discover是客户端连入网络之后(配的自动获取),会对外发送Discover,其实这个报文的作用可以理解为网络当中谁是服务器,用广播去发&a…

Codeforces Round 969 (Div. 2) C. Dora and C++ (裴蜀定理)

什么?竟然是裴蜀定理。。。 由于这里给出了a和b两个数,我们或许可以想到使用同样是需要给出两个定值的裴蜀定理,即: 如果给定 x x x和 y y y,那么一定有 a x b y g c d ( x , y ) axbygcd(x,y) axbygcd(x,y)。 所以…

vue3【实战】菜单导航(高亮当前路由,鼠标悬浮下标、页面滚动顶部悬浮并变色)

效果预览 完整代码 <template><!-- 导航 --><nav class"fixed flex items-center p-2 w-full nav-bg1" :class"{ nav-bg2: y }"><img src"/EC_Logo.jpg" class"w-12 h-12 lt-sm:mx-auto logo" alt"logo&quo…

LSM-Tree简单介绍

前言 这里完成每日的创作要求&#xff0c;用一下自己看论文整理的LSM-Tree理论 2.1 LSM-Tree 基础理论 LSM Tree 组织 总共有n1层&#xff0c;代表L0到Ln 每个级别将键值对存储在不可变的固定大小文件中&#xff08;类似于HDFS的块设定&#xff09;&#xff0c;每个文件有几…

【Python进阶】带你了解Python的学习路线,从入门到进阶,附带项目演练和源码!!!

Python学习资料 基础知识 Python简介 Python是一种高级编程语言&#xff0c;具有简单易学、可读性强、可移植性好等特点。它广泛应用于Web开发、数据科学、人工智能等领域。 Python编程语言 Logo Python环境搭建 在开始学习Python之前&#xff0c;你需要先安装Python解释器…

什么是公园智慧公厕系统?公园智慧厕所主要功能有哪些@卓振思众

公园智慧公厕是一种利用现代信息技术手段&#xff0c;对公园内的公共厕所进行智能化管理和服务的设施&#xff0c;【卓振思众】智慧公厕系统具有以下特点和功能&#xff1a; 一、环境监测空气质量监测&#xff1a;配备传感器实时监测公厕内空气质量&#xff0c;如检测到异味、有…

LottieCompositionFactory.fromUrl 加载lottie的json文件

当你使用 LottieCompositionFactory.fromUrl 加载动画时&#xff0c;Lottie 会将下载的动画文件缓存到应用的本地缓存目录下。 LottieCompositionFactory.fromUrl(context, url).addListener(object : LottieListener<LottieComposition> {override fun onResult(result…

逻辑一键导入导出,解决企业多环境数据迁移的难题

在当今复杂多变的商业环境中&#xff0c;系统间的数据迁移、备份与共享成为了确保业务连续性和一致性的关键环节。随着企业规模的不断扩大和业务的日益复杂化&#xff0c;JVS逻辑引擎作为一款集高效、灵活、可扩展性于一身的决策支持系统&#xff0c;还通过其独特的导入导出功能…