MOOC笔记——用Tensorflow制作数据集

tfrecords文件的简介:

tfrecords是一种二进制文件,可以将图片和标签制作成该格式的文件。使用tfrecords进行数据读取,会提高内存利用率。

存储训练数据的方法:

使用tf.train.Example()存储,训练数据的特征用键值对的形式表示,例如:

'img_raw': (图片)值          'label': 标签值(值是Bytelist/Floatlist/Int64List格式)

使用SerializeToSting()把数据序列化成字符串存储

程序来源人工智能实践:Tensorflow笔记

程序介绍

    程序分为以下4个模块来执行数据集的制作以及提取,详细介绍见程序注释

    1.    write_tfRecord()        用于生成tfRecord文件

    2.    generate_tfRecord() 用于把生成的tfRecord文件保存到本地

    3.    read_tfRecord()        用于解析tfRecord文件

    4.    get_tfrecord()           用于批获取训练集或测试集的内容和标签

制作的图片展示(部分)和图片下载链接(百度网盘(密码:ho4l)):

程序:

#coding:utf-8
import tensorflow as tf
import numpy as np
from PIL import Image
import os

# 这是设置的路径,可以根据您的需要修改
image_train_path='./mnist_data_jpg/mnist_train_jpg_60000/'
label_train_path='./mnist_data_jpg/mnist_train_jpg_60000.txt'
tfRecord_train='./data/mnist_train.tfrecords'
image_test_path='./mnist_data_jpg/mnist_test_jpg_10000/'
label_test_path='./mnist_data_jpg/mnist_test_jpg_10000.txt'
tfRecord_test='./data/mnist_test.tfrecords'
data_path='./data'
# 设置长宽像素点个数
resize_height = 28
resize_width = 28

# 生成tfrecords文件
def write_tfRecord(tfRecordName, image_path, label_path):
    writer = tf.python_io.TFRecordWriter(tfRecordName)  # 新建一个writer
    num_pic = 0 
    f = open(label_path, 'r')
    contents = f.readlines()    # 一次全部读入,速度比较快
    f.close()   
    for content in contents:
        '''
        该目录下的文件下的txt内容为:
        0_5.jpg 5
        1_0.jpg 0
        2_4.jpg 4
        .......
        '''
        value = content.split() # 用空格分开
        img_path = image_path + value[0] 
        img = Image.open(img_path)
        img_raw = img.tobytes() # 转化为二进制文件
        labels = [0] * 10  
        labels[int(value[1])] = 1 # 设置标签位为1 
        
        # 用tf.train.Example的协议存储训练数据,训练数据的特征用键值对的形式表示
        example = tf.train.Example(features=tf.train.Features(feature={
                'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw])),
                'label': tf.train.Feature(int64_list=tf.train.Int64List(value=labels))
                }))     # 把每张图片和标签封装到example中
        writer.write(example.SerializeToString())   # 将example序列化(把数据序列化成字符串存储)
        num_pic += 1 
        print ("the number of picture:", num_pic)
    writer.close() # 关闭writer
    print("write tfrecord successful")

# 产生数据集
def generate_tfRecord():
	isExists = os.path.exists(data_path)  # 判断路径是否存在
	if not isExists: # 如果不存在
		os.makedirs(data_path)   # 新建一个目录
		print ('The directory was created successfully')
	else:
		print ('directory already exists')
    # 生成tfRecords文件
	write_tfRecord(tfRecord_train, image_train_path, label_train_path)
	write_tfRecord(tfRecord_test, image_test_path, label_test_path)

# 解析tfrecords文件 
def read_tfRecord(tfRecord_path):
    # [tfRecord_path]为文件的路径,如果文件比较大可以写多个
    filename_queue = tf.train.string_input_producer([tfRecord_path], shuffle=True)
    reader = tf.TFRecordReader() # 新建一个reader
    _, serialized_example = reader.read(filename_queue) # 将读出的每个样本保存在serialize_example中
    features = tf.parse_single_example(serialized_example, 
                                       features={
                                        'label': tf.FixedLenFeature([10], tf.int64), # 10分类写10
                                        'img_raw': tf.FixedLenFeature([], tf.string)
                                        })  # 解序列化
    img = tf.decode_raw(features['img_raw'], tf.uint8)  # 恢复img_raw 到 img
    img.set_shape([784])  # 把img的shape设为[1,784]
    img = tf.cast(img, tf.float32) * (1. / 255) # 归一化到0-1
    label = tf.cast(features['label'], tf.float32)  # 同时把label值也设为浮点型
    return img, label 

# 批获取训练集或测试集的内容和标签
def get_tfrecord(num, isTrain=True):
    if isTrain: # 获取训练集,isTrain参数设置为True
        tfRecord_path = tfRecord_train
    else:       # 获取测试集,isTrain参数设置为False
        tfRecord_path = tfRecord_test
    img, label = read_tfRecord(tfRecord_path)
    # 从总样本中顺序获取capactiy组数据,打乱顺序,每次输出batch_size组,用了2个线程
    img_batch, label_batch = tf.train.shuffle_batch([img, label],
                                                    batch_size = num,
                                                    num_threads = 2,
                                                    capacity = 1000,
                                                    min_after_dequeue = 700)
    return img_batch, label_batch

def main():
    generate_tfRecord()

if __name__ == '__main__':
    main()

通过运行该程序中的generate_tfRecord()模块,我们就可以在./data/路径下看到以下文件:

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
MOOC(大规模开放式在线课程)是一种通过网络平台开设的在线教育课程,可以为广大学习者提供方便灵活的学习机会。人工智能实践:TensorFlow笔记,是由北京大学推出的一门针对人工智能领域的实践课程,旨在帮助学习者掌握使用TensorFlow框架进行深度学习的基本方法和技巧。 该课程的代码提供了一系列丰富的示例和实践项目,通过这些代码我们可以了解和掌握TensorFlow的使用方法。其中包括数据处理、模型构建、模型训练与评估等关键步骤。通过学习和实践,我们可以学会如何搭建神经网络模型,进行图像分类、文本生成等任务。 在这门课程中,北京大学的代码示例主要围绕深度学习的常用库TensorFlow展开,通过给出具体的代码实现,解释了每部分的原理和操作方法,帮助学习者理解基本概念和技术,熟悉TensorFlow框架和编程语言的使用。 此外,这门课程还涵盖了一些实践项目,例如基于TensorFlow的手写数字识别、图像分类与预测、文本生成等。通过完成这些实践项目,我们可以加深对TensorFlow的理解并提高实践能力。 总之,人工智能实践: TensorFlow笔记 - 北京大学代码是一门结合了理论与实践的在线课程,通过教授深度学习的基本概念和TensorFlow的应用方法,帮助学习者掌握人工智能领域的基本技能。通过这门课程,我们可以学习到TensorFlow的使用方法,掌握一定的实践能力,并将这些知识应用于实际项目当中。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值