您好,欢迎来到汇智旅游网。
搜索
您的当前位置:首页tf.data.TextLineDataset 解析csv

tf.data.TextLineDataset 解析csv

来源:汇智旅游网

TextLineDataset的读取机制:读取文本中数据,一行代表一组数据,一般再按照filter、map、shuffle、batch、repeat、prefetch的顺序获得可用数据。
在csv中,因存在头部行,使用filter对数据进行筛选,去掉不符合数据结构的行。

from six.moves.urllib.request import urlopen
import os
 
import numpy as np
import tensorflow as tf
 
IRIS_TRAINING = "iris_training.csv"
IRIS_TRAINING_URL = "http://download.tensorflow.org/data/iris_training.csv"
 
IRIS_TEST = "iris_test.csv"
IRIS_TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"
 
if not os.path.exists(IRIS_TRAINING):
   raw = urlopen(IRIS_TRAINING_URL).read()
   with open(IRIS_TRAINING, "wb") as f:
       f.write(raw)
 
if not os.path.exists(IRIS_TEST):
   raw = urlopen(IRIS_TEST_URL).read()
   with open(IRIS_TEST, "wb") as f:
       f.write(raw)
 
fun = lambda x1: not tf.strings.regex_full_match(x1, '.*[a-z|A-Z].*')  # 判断是否存在字母
 
def funStringSplit(x):
   #对每行特征进行处理,这里可能会报错,需要更改这里的 x 为 [x] 
   split_strings = tf.strings.to_number(tf.strings.split(x, ','))  # 分割字符串
   features, target = tf.split(split_strings, [4, 1], axis=0)
   return features, target
# 很多csv有表头,那么我们这里需要使用
# trainSet = tf.data.TextLineDataset([IRIS_TRAINING]).skip(1)
# 这里[IRIS_TRAINING],表示一个列表,TextLineDataset可以读取多个文件,这里只有一个文件所以可以去掉中括号
trainSet = tf.data.TextLineDataset([IRIS_TRAINING])
testSet = tf.data.TextLineDataset([IRIS_TEST])
 
trainSet = trainSet.filter(fun)
testSet = testSet.filter(fun)
 
trainSet = trainSet.map(funStringSplit,num_parallel_calls=4)
testSet = testSet.map(funStringSplit,num_parallel_calls=4)

我们可能在tensorflow 1.x的一些版本遇到这样的情况,运行上面的代码出现以下错误

AttributeError: 'Tensor' object has no attribute 'to_sparse'

需要更改

split_strings = tf.strings.to_number(tf.strings.split(x, ','))
#改为
split_strings = tf.strings.to_number(tf.strings.split([x], ','))

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务