即如何从 CSV 文件中读取数据并在训练之前对数据进行预处理
import tensorflow as tf
#全局变量
data_file='boston_hosing.csv'
batch_size=10
num_features=14
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=tf.train.string_input_producter(filename)
reader=tf.TextLineReader(skip_header_lines=1)
#跳过第一行
_,value=reader.read(f_queue)
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]
#
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 控制操作和张量来对数据进行预处理。例如,对于波士顿房价的情况,大约有 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() 操作赋为零值。