首页 > 编程知识 正文

马尔库塞关于需要的理解,关于非语言信息的理解错误的是

时间:2023-05-03 23:41:31 阅读:237113 作者:4770

关于tf.train.shuffle_batch 中的参数 shuffle、min_after_dequeue

shuffle的作用在于指定是否需要随机打乱样本的顺序,一般作用于训练阶段,提高鲁棒性。 
1、当shuffle = false时,每次dequeue是从队列中按顺序取数据,遵从先入先出的原则 
2、当shuffle = true时,每次从队列中dequeue取数据时,不再按顺序,而是随机的,所以打乱了样本的原有顺序。

shuffle还要配合参数min_after_dequeue使用才能发挥作用。 
这个参数min_after_dequeue的意思是队列中,做dequeue(取数据)的操作后,queue runner线程要保证队列中至少剩下min_after_dequeue个数据。 
如果min_after_dequeue设置的过少,则即使shuffle为true,也达不到好的混合效果。

这个地方可能不太好理解,我尝试解释一下吧,但可能解释的不太好。 
假设你有一个队列,现在里面有m个数据,你想要每次随机从队列中取n个数据,则代表先混合了m个数据,再从中取走n个。 
当第一次取走n个后,队列就变为m-n个数据; 
内向的音响下次再想要取n个时,假设队列在此期间插进来了k个数据,则现在的队列中有 
(bzdtn)个数据,则此时会从混合的(bzdtn)个数据中随机取走n个,。如果队列填充的速度比较慢,k就比较小,那你取出来的n个数据只是与周围很小的一部分(bzdtn)个数据进行了混合。

因为我们的目的肯定是想尽最大可能的混合数据,因此设置min_after_dequeue,可以保证每次dequeue后都有足够量的数据填充尽队列,保证下次dequeue时可以很充分的混合数据。

但是min_after_dequeue也不能设置的太大,这样会导致队列填充的时间变长,尤其是在最初的装载阶段,会花费比较长的时间。
 
原文:https://blog.csdn.net/masa_fish/article/details/52624459 
 

capacity是队列的长度
min_after_dequeue是出队后,队列至少剩下min_after_dequeue个数据
假设现在有个test.tfrecord文件,里面按从小到大顺序存放整数0~100
1. tf.train.batch是按顺序读取数据,队列中的数据始终是一个有序的队列,
比如队列的capacity=20,开始队列内容为0,1,..,19=>读取10条记录后,队列剩下10,11,..,19,然后又补充10条变成=>10,11,...,29,
队头一直按顺序补充,队尾一直按顺序出队,到了第100条记录后,又重头开始补充0,1,2...


2. tf.train.shuffle_batch是将队列中数据打乱后,再读取出来,因此队列中剩下的数据也是乱序的,队头也是一直在补充(我猜也是按顺序补充),
比如batch_size=5,capacity=10,min_after_dequeue=5,
初始是有序的0,1,..,9(10条记录),
然后打乱8,2,6,4,3,7,9,2,0,1(10条记录),
队尾取出5条,剩下7,9,2,0,1(5条记录),
然后又按顺序补充进来,变成7,9,2,0,1,10,11,12,13,14(10条记录),
再打乱13,10,2,7,0,12...1(10条记录),
再出队...

capacity可以看成是局部数据的范围,读取的数据是基于这个范围的,

在这个范围内,min_after_dequeue越大,数据越乱

原文:https://blog.csdn.net/ying86615791/article/details/73864381 
 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。