栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何*实际*读取TensorFlow中的CSV数据?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何*实际*读取TensorFlow中的CSV数据?

我认为您在这里混淆了命令性和图形构造部分。该操作将

tf.train.shuffle_batch
创建一个新的队列节点,并且可以使用一个节点来处理整个数据集。因此,我认为您之所以绞尽脑汁,是因为您
shuffle_batch
在for循环中创建了一堆队列,而没有为其启动队列运行器。

正常的输入管道用法如下所示:

  1. 添加喜欢的节点
    shuffle_batch
    到输入管道
  2. (可选,以防止意外修改图)完成图

-–图形构造结束,命令式编程开始-

  1. tf.start_queue_runners
  2. while(True): session.run()

为了更具可扩展性(避免使用Python
GIL),您可以使用TensorFlow管道生成所有数据。但是,如果性能不是很关键,则可以使用

slice_input_producer.
以下示例将一个numpy数组连接到输入管道:这是一个带有一些
Print
节点的示例,以查看发生了什么(
Print
运行节点时进入stdout的消息)

tf.reset_default_graph()num_examples = 5num_features = 2data = np.reshape(np.arange(num_examples*num_features), (num_examples, num_features))print data(data_node,) = tf.slice_input_producer([tf.constant(data)], num_epochs=1, shuffle=False)data_node_debug = tf.Print(data_node, [data_node], "Dequeueing from data_node ")data_batch = tf.batch([data_node_debug], batch_size=2)data_batch_debug = tf.Print(data_batch, [data_batch], "Dequeueing from data_batch ")sess = tf.InteractiveSession()sess.run(tf.initialize_all_variables())tf.get_default_graph().finalize()tf.start_queue_runners()try:  while True:    print sess.run(data_batch_debug)except tf.errors.OutOfRangeError as e:  print "No more inputs."

你应该看到这样的东西

[[0 1] [2 3] [4 5] [6 7] [8 9]][[0 1] [2 3]][[4 5] [6 7]]No more inputs.

“ 8、9”数字没有填满整个批次,因此没有得到生产。还

tf.Print
可以打印到sys.stdout,因此它们对我来说分别显示在Terminal中。

PS:连接

batch
到手动初始化的队列的最低要求在github问题2193中

另外,出于调试目的,您可能需要

timeout
在会话上进行设置,以使IPython Notebook不挂在空队列出队中。我在会话中使用此帮助器功能

def create_session():  config = tf.ConfigProto(log_device_placement=True)  config.gpu_options.per_process_gpu_memory_fraction=0.3 # don't hog all vRAM  config.operation_timeout_in_ms=60000   # terminate on long hangs  # create interactive session to register a default session  sess = tf.InteractiveSession("", config=config)  return sess

可伸缩性注意事项:

  1. tf.constant
    将您的数据副本内联到Graph中。Graph定义的大小有2GB的基本限制,因此这是数据大小的上限
  2. 你可以避开这一限制使用
    v=tf.Variable
    和保存数据到那里通过运行
    v.assign_op
    一个
    tf.placeholder
    在右侧和喂养numpy的阵列到占位符(
    feed_dict
  3. 这样仍然会创建两个数据副本,因此,为了节省内存,您可以使自己的版本
    slice_input_producer
    在numpy数组上运行,并使用
    feed_dict


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617557.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号