TensorFlow csv文件读取数据
即如何从 CSV 文件中读取数据并在训练之前对数据进行预处理
tensorflow读取csv文件的过程
- 导入所需的模块并声明全局变量
import tensorflow as tf
#全局变量
data_file='boston_hosing.csv'
batch_size=10
num_features=14
- 定义一个将文件名作为参数的函数,并返回大小等于 BATCH_SIZE 的张量:
def data_generator(filename):
'''
Generates Tensors in batches of size batch_size.
Args:String Tensor
Filename from which data is to be read
Returns:Tensors
feature_batch and label_batch
'''
- 定义 f_queue 和 reader 为文件名:
f_queue=tf.train.string_input_producter(filename)
reader=tf.TextLineReader(skip_header_lines=1)
#跳过第一行
_,value=reader.read(f_queue)
- 这里指定要使用的数据以防数据丢失。对 .csv 解码并选择需要的特征。例如,选择 RM、PTRATIO 和 LSTAT 特征:
record_defaults=[[0.0]for_in range(num_features)]
data=tf.decode_csv(value,record_defaults=record_defaults)
features=tf.stack(tf.gather_nd(data,[[5],[10],[23]]))
label=data[-1]
- 定义参数来生成批并使用 tf.train.shuffle_batch() 来随机重新排列张量。该函数返回张量 feature_batch 和 label_batch:
#
dequeuemin_after_dequeue=10*betch_size
#
capacity=20*betch_size
#
feature_batch,label_batch=tf.train.shuffle_batch([features,label],BATCH_SIZE=betch_size,capacity=capacity,min_after_dequeue=min_after_dequeue)
return feature_batch,label_batch
- 这里定义了另一个函数在会话中生成批:
def generate_data(feature_batch,label_batch):
with tf.Session() as sess:
#
coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(coord=coord)
for _ in range(5): #
features,labels=sess.run([feature_batch,label_batch])
print(features,''HI'')
coord.request_stop()
coord.join(threads)
- 使用这两个函数得到批中的数据。这里,仅打印数据;在学习训练时,将在这里执行优化步骤:
if _name_=='_main_':
feature_batch,label_batch=data_generator([DATA_FILE])
generate_data(feature_batch,label_batch)
tensorflow csv 数据处理
用 TensorFlow 控制操作和张量来对数据进行预处理。例如,对于波士顿房价的情况,大约有 16 个数据行的 MEDV 是 50.0。在大多数情况下,这些数据点包含缺失或删减的值,因此建议不要考虑用这些数据训练。可以使用下面的代码在训练数据集中删除它们:
condition=tf.equal(data[13],tf.constant(50.0))
data=tf.where(condition,tf.zeros(num_features)),data[:]
这里定义了一个张量布尔条件,若 MEDV 等于 50.0 则为真。如果条件为真则可使用 TensorFlow tf.where() 操作赋为零值。