Tensorflow2.1读取CSV文件_batch

Tensorflow2.1读取CSV文件_batch

1.注意事项

CSV文件:

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列.

×读取出的数据一般为字符类型,如果是数字需要人为转换为数字。
×以行为单位读取数据。
×列之间以半角逗号或制表符为分隔,一般为半角逗号(如果是';'或其他符号则需要在使用函数时修改默认参数...)。
×一般为每行开头不空格,第一行是属性列,数据列之间以间隔符为间隔无空格,行之间无空行。
(https://www.cnblogs.com/cloud-ken/p/8432999.html)

____行之间无空行十分重要,如果有空行或者数据集中行末有空格,读取数据时一般会出错,引发[list index out of range]错误。

2.代码:

# 使用tensorflow读取.CSV文件(特定格式的文本文件,常用来存储机器学习数据集),文件为同目录下的divorce.csv
import tensorflow as tf
import numpy as np
import csv
import os

# 关闭紧急执行(tf2执行tf1函数)
tf.compat.v1.disable_eager_execution()
# 1默认显示所有信息,2显示warning和error,3只显示error
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
# ==================

fileName = 'divorce.csv'
file_queue = tf.compat.v1.train.string_input_producer([fileName])  # 设置文件名队列,这样做能够批量读取文件夹中的文件
reader = tf.compat.v1.TextLineReader(skip_header_lines=1)  # 使用tensorflow文本行阅读器,并且设置忽略第一行
key, value = reader.read(file_queue) # 行号,值
defaults = [[0.] for i in range(55)]  # 设置列属性的数据格式,55
attributes = tf.compat.v1.decode_csv(value, defaults, ';')
# 将读取的数据编码为我们设置的默认格式
vector_example = tf.stack(attributes[:len(attributes) - 1])  # 读取得到的列属性为训练特征
vector_label = tf.stack(attributes[len(attributes) - 1:])  # 读取得到的最后一个表示训练标签

# 用于给取出的数据添加上batch_size维度,以批处理的方式读出数据。可以设置批处理数据大小,是否重复读取数据,容量大小,队列末尾大小,读取线程等属性。
# 随机顺序组成批:example_batch, label_batch = tf.compat.v1.train.shuffle_batch([vector_example, vector_label],
#  batch_size=10,num_threads=5, capacity=10*len(attributes), min_after_dequeue=10)
# 顺序组成批:每批batch_size条数据,1个线程,最大容量:batch_size*len(attributes)
example_batch, label_batch = tf.compat.v1.train.batch([vector_example, vector_label],
                                                      batch_size=10, num_threads=1, capacity=10*len(attributes))
# 初始化Session
with tf.compat.v1.Session() as sess:
    coord = tf.compat.v1.train.Coordinator()  # 线程管理器
    threads = tf.compat.v1.train.start_queue_runners(coord=coord)
    print(sess.run(tf.shape(example_batch)))  # [10  54]
    print(sess.run(tf.shape(label_batch)))  # [10  1]
    print(sess.run(example_batch)[0])  #
    coord.request_stop()
    coord.join(threads)

'''
对于使用所有Tensorflow1的I/O操作来说开启和关闭线程管理器都是必要的操作(以上代码已修改,tf2使用tf1:tf.compat.v1.xx)
with tf.Session() as sess:
    coord = tf.train.Coordinator()  # 线程管理器
    threads = tf.train.start_queue_runners(coord=coord)
    #  Your code here~
    coord.request_stop()
    coord.join(threads)
'''

原理及某方面更好的讲解(O(∩_∩)O哈哈~):TensorFlow csv文件读取数据(代码实现)详解
本文代码参考并改进自链接:
Python读写csv文件
tensorflow 批次读取文件内的数据,并将顺序随机化处理. --[python]
tensorflow中多线程批量读取csv文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值