tensorflow 转张量类型为float_TensorFlow .NET 队列操作

TensorFlow能够并行处理多个任务,而队列是一种强大的异步计算机制。 如果我们拥有大型数据集,则可以大大加快模型的训练过程。 当以小批量读取,预处理和提取我们的训练数据时,此功能特别方便。 能够对我们的模型进行专业且高性能的训练的秘诀是使用TensorFlow提供的排队操作。 TensorFlow已经实现了4种类型的队列:FIFOQueue,PaddingFIFOQueue,PriorityQueue和RandomShuffleQueue。

10af9347bc51febb908bb765816a30c4.png

就像TensorFlow中的所有操作一样,队列也是计算图中的一个节点。它是一个有状态的节点,就像变量一样:其他节点可以修改其内容,特别是节点可以将新元素加入到队列,或从队列中弹出现有元素。

为了开始学习队列操作,让我们先从一个简单的示例开始。我们将创建一个“先进先出”队列(FIFOQueue)并用数字填充。然后,我们将构建一个计算图,该图将一个元素从队列中移出,然后将一个元素添加到该项目中,最后将其放回队列的末尾。

TestMethod]

Enqueue,_EnqueueMany_和_Dequeue_是特殊的节点。他们使用一个指向队列的指针而不是普通值,从而允许他们对其进行更改。我首先创建一个最大为2的FIFOQueue队列,然后将两个值放入队列。然后,我立即尝试从中取出一个值并将其分配给y,在这里我只需将1添加到已出列的变量。接下来,我们开始一个会话并运行。运行几次该操作后,队列将为空-如果尝试再次运行该操作,则程序的主线程将挂起或阻塞-这是因为它将等待另一个操作运行到将更多值放入队列。

FIFOQueue
创建一个队列,以先进先出的顺序使元素出队。FIFO队列具有有限的容量;支持多个并发的生产者和消费者;并提供一次精确消费。FIFOQueue包含最多容量元素的列表。每个元素都是张量的定长元组,其张量类型由dtypes描述,其形状可选地由shapes参数描述。

PaddingFIFOQueue
一个FIFOQueue通过填充支持批量可变大小张量。PaddingFIFOQueue可以包含具有动态形状的组件,同时还支持dequeue_many。PaddingFIFOQueue最多可容纳一个容量元素列表。每个元素都是张量的定长元组,其张量由dtypes描述,其形状由shapes参数描述。

PriorityQueue
一个按优先级出队元素的队列实现。PriorityQueue具有有限的容量;支持多个并发的生产者和消费者;并提供一次精确的投放。PriorityQueue包含最多容量元素的列表。每个元素都是张量的定长元组,其张量类型由类型描述,其形状可选地由shapes参数描述。

RandomShuffleQueue
一个以随机顺序使元素出队的队列实现。RandomShuffleQueue具有有限的容量;支持多个并发的生产者和消费者;并提供一次精确的投放。RandomShuffleQueue包含最多容量元素的列表。每个元素都是张量的定长元组,其张量类型由dtypes描述,其形状可选地由shapes参数描述。

队列方法必须与队列在同一设备上运行。FIFOQueue和RandomShuffleQueue是重要的TensorFlow对象,用于在图形中异步计算张量。例如,典型的输入体系结构是使用RandomShuffleQueue为训练模型准备输入:

  • 多个线程准备培训示例并将其放入队列。

  • 训练线程执行训练操作,以使迷你批处理从队列中出队。

这种架构体系结构简化了输入管道的构造。

查看C#程序代码:https://github.com/SciSharp/TensorFlow.NET/blob/master/test/TensorFlowNET.UnitTest/QueueTest.cs

在上面的示例中,一旦队列里没有元素,您必须在程序被阻止时终止程序。很显然,这不是很有用。我们真正想要的事情是,只要队列为空或将要为空,我们的程序就可以重新加载或排队更多的值。我们可以通过在上面的代码中再次明确运行enqueue_op来重新加载值,从而解决此问题。但是,对于大型,更实际的程序,这显然不可行。幸运的是,TensorFlow有一个解决方案。

TensorFlow提供了两个类来帮助执行多线程任务:tf.Coordinator和tf.QueueRunner。有两个类可以一起使用。Coordinator类可帮助多个线程停在一起并将异常报告给主线程。QueueRunner类用于创建多个线程,以将张量推入同一队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值