首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >seq2seq.py#model_with_buckets中不必要的操作

seq2seq.py#model_with_buckets中不必要的操作
EN

Stack Overflow用户
提问于 2017-03-30 15:06:15
回答 1查看 69关注 0票数 0

以seq2seq教程为例,假设我们有(5,5),(10,10)的存储桶,批处理大小为16: model_with_buckets用于构建模型。对于model_with_buckets(它是encoder_inputs)的输入,它是一个存储桶中的批处理,例如。大小为5*16但是,有代码可以对所有存储桶运行此批处理,即使它的大小与存储桶大小不同

代码语言:javascript
复制
# tensorflow/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py
# in def model_with_buckets()
# this will run twice: seq2seq(encoder_inputs[:5],...) and seq2seq(encoder_inputs[:10],...)
# but encoder_inputs only belongs to bucket (5,5) and with size 5*16
for j, bucket in enumerate(buckets):
    ...
    bucket_outputs, _ = seq2seq(encoder_inputs[:bucket[0]],
                                decoder_inputs[:bucket[1]])

当输出时,只使用encoder_inputs所属的桶的损失。

代码语言:javascript
复制
# models/tutorials/rnn/translate/seq2seq_model.py
# in def step()
output_feed = [self.updates[bucket_id],  # Update Op that does SGD.
               self.gradient_norms[bucket_id],  # Gradient norm.
               self.losses[bucket_id]]  # Loss for this batch.

因此,在我看来,model_with_buckets正在做不必要的工作,将encoder_inputs提供给其他不属于它的存储桶。这样做的目的是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-07-11 18:09:39

代码处于图的阶段,composition.That是重点。当与session关联时,step()函数将选择特定的存储桶。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43110815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档