鱼C论坛

 找回密码
 立即注册
查看: 1185|回复: 1

[技术交流] 通过tensorflow读取数据

[复制链接]
发表于 2018-11-27 19:11:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 alltolove 于 2018-11-27 19:17 编辑

        tensorflow读取数据的方法很多,有多线程队列的方法:
import tensorflow as tf  
import sys  
q = tf.FIFOQueue(10, "float")  
counter = tf.Variable(0.0)  #计数器
# 给计数器加一
increment_op = tf.assign_add(counter, 1.0)
# 将计数器加入队列
enqueue_op = q.enqueue(counter)

# 创建QueueRunner
# 用多个线程向队列添加数据
# 这里实际创建了4个线程,两个增加计数,两个执行入队
qr = tf.train.QueueRunner(q, enqueue_ops=[increment_op, enqueue_op] * 2)

# 主线程
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# 启动入队线程
qr.create_threads(sess, start=True)
for i in range(20):
    print (sess.run(q.dequeue()))
        还有随机读取数据的方法:
import tensorflow as tf
 
q = tf.RandomShuffleQueue(capacity=10,min_after_dequeue=0, dtypes="string")
enqueue_op = q.enqueue(['aaa','bbb'])
qr = tf.train.QueueRunner(q, enqueue_ops=[enqueue_op] * 1)
sess = tf.Session()
coord = tf.train.Coordinator()
enqueue_threads = qr.create_threads(sess, start=True,coord=coord)
try:
    for i in range(100):
        print(sess.run(q.dequeue()))
        if i>=50:
            coord.request_stop()
            coord.join(enqueue_threads)
            print(i)
except tf.errors.OutOfRangeError:
    print('Done training -- epoch limit reached')
finally:
    coord.request_stop()
    coord.join(enqueue_threads)
        还有读取文件的方法:
import tensorflow as tf

train_filenames=['data_batch_%d'%i for i in range(1,6)]

q = tf.FIFOQueue(capacity=5, dtypes=tf.string, name="queue")


init = q.enqueue_many((train_filenames,))


x = q.dequeue()

with tf.Session() as sess:

    # 运行初始化队列的操作。
    init.run()
    for i in range(5):

        # 运行q_inc将执行数据出队列,出队的元素值加1,重新加入队列的整个过程。
        v= sess.run(x)

        # 打印出队元素的值。
        print(v)
        还有反正是各种用线程读数据方法:
import tensorflow as tf
import numpy as np



queue = tf.FIFOQueue(100, tf.float32)

enqueue_op = queue.enqueue([[1]])


qr = tf.train.QueueRunner(queue, [enqueue_op]*5)


tf.train.add_queue_runner(qr)


out_tensor = queue.dequeue()


with tf.Session() as sess:

    
    coord = tf.train.Coordinator()


    threads = tf.train.start_queue_runners(sess=sess, coord=coord)


    for i in range(6):


        print(sess.run(out_tensor)[0])


    coord.request_stop()
    coord.join(threads)
       
        以上这些方法都是太深奥了,没有多少人会用,对于我这个连入门都不算的新手来说更是没法用。
        现在我主要用的是dataset方法,代码如下:
import tensorflow as tf
import numpy as np
BATCH_SIZE = 5
x = np.array([
    [100,2,2,3],
    [200,1,1,1],
    [300,2,2,2],
    [400,21,1,1]
])
y = np.array([
    [100,2,2,3],
    [200,1,1,1],
    [300,2,2,2],
    [400,21,1,1]
])
dataset = tf.data.Dataset.from_tensor_slices({'x':x,'y':y})
dataset = dataset.shuffle(buffer_size=4)
dataset=dataset.batch(BATCH_SIZE)
dataset=dataset.repeat()
iter = dataset.make_one_shot_iterator()
el = iter.get_next()

with tf.Session() as sess:
    for i in range(6):
        print('x',sess.run(el)['x'])
        print('y',sess.run(el)['y'])
        这种方法有个坑,就是x和y随机shuffle的数据不统一,x和y都是各自随机的。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-27 21:04:32 | 显示全部楼层
都是版主纯原创的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表