实例4:将Excel文件制作成内存对象数据库

实例4:将Excel文件制作成内存对象数据库

实例描述:
有两个Excel文件:一个为训练数据,另一个为测试数据
现在需要做的是:1,将训练数据按批次输出。2,将测试数据按样本顺序输出

1. 样本介绍

样本为两个csv文件——iris_training.csv和iris_test.csv

2. 代码实现:逐行读取数据并分离标签

定义read_data用于读取数据

  • 调用tf.TextLineReader函数,对单个Excel文件进行逐行读取
  • 调用tf.decode_csv,将Excel文件中的单行内容按指定的列进行分离
  • 将Excel单行中多个属性列按样本数据列与标签数据列进行划分:将样本数据列放到2~4列,用tf.stack函数组合;将标签数据列放到最好1列
import tensorflow as tf

def read_data(file_queue):
    reader = tf.TextLineReader(skip_header_lines=1)     #可以每次读一行
    key, value = reader.read(file_queue)
    
    defaults = [[0], [0.], [0.], [0.], [0.], [0.]]      #为每个字段设置初始值
    cvscolumn = tf.deconde_csv(value, defaults)          #对每一个行解析
    
    featurecolumn = [i for i in cvscolumn[1:-1]]        #划分出列中的样本数据列
    labelcolumn = cvscolumn[-1]
    
    return tf.stack(featurecolumn), labelcolumn 

2. 代码实现:生成队列中的批次样本数据

编写create_pipeline函数,用于返回批次数据:

  • tf.train.string_input_producer函数生成一个输入队列
  • 用上面read_data函数读取csv文件内容,并将样本和标签分离处理
  • 用tf.train.shuffle_batch函数生成批次数据
def create_pipeline(filename, batch_size, num_epochs=None):
    
    file_queue = tf.train.string_input_producer([filename], num_epochs=num_epochs)
    
    feature, label = read_data(file_queue)
    min_after_dequeue = 1000    #在队列里至少保留1000条数据
    capacity =min_after_dequeue + batch_size
    feature_batch, label_batch = tf.train.shuffle_batch([feature, label],
                                                        batch_size=batch_size,
                                                        capacity = capacity,
                                                        min_after_dequeue=min_after_dequeue)
    return feature_batch, label_batch

x_train_batch, y_train_batch = create_pipeline('iris_training.csv', 32,num_epochs=100)
x_test, y_test = create_pipeline('iris_test.csv', 32)

4. 代码实现:在会话中使用数据集

with tf.Session() as sess:
    
    init_op = tf.global_variables_initializer()
    local_init_op = tf.local_variables_initializer()
    sess.run(init_op)
    sess.run(local_init_op)
    
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    
    try:
        while True:
            if coord.should_stop():
                break
            example, label = sess.run([x_train_batch, y_train_batch])
            print("训练数据:",example)
            print("训练标签:",label)
    except tf.errors.OutOfRangeError:
        print("Done reading")
        example, label = sess.run([x_test, y_test])
        print("测试数据:",example)
        print("测试标签:",label)
    except KeyboardInterrupt:
        print("程序终止。。。")
    finally:
        coord.request_stop()
    coord.join(threads)
    sess.close()

出现’utf-8’ codec can’t decode byte 0xd5 in position 146: invalid continuation byte的错误
-csv文件不是由utf-8来存储的,而是采取encoding='gbk’的方式进行存储,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值