首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sequence_loss_by_example权

sequence_loss_by_example权
EN

Stack Overflow用户
提问于 2016-09-29 13:43:22
回答 1查看 2.4K关注 0票数 0

我想为tf.nn.seq2seq.sequence_loss_by_example做重量张量。我使用的是最大100步的RNN,并且用最大的步骤(100)将每个批处理项目进行零填充。

我的日志和标签的形状都是这样的。

代码语言:javascript
复制
Tensor("dropout/mul_1:0", shape=(50000, 168), dtype=float32) # logits
Tensor("ArgMax:0", shape=(500, 100), dtype=int64)            # labels

50000是500(batch_size) * 100(num_steps),168个是类数,我将它们像Tensorflow提供的ptb_word_lm.py代码一样传递给sequence_loss_by_example。lm.py

代码语言:javascript
复制
loss = tf.nn.seq2seq.sequence_loss_by_example(
            [logits],
            [tf.reshape(labels, [-1])],
            [tf.ones([cf.batch_size * cf.max_time_steps], dtype=tf.float32)])

但是,由于我的逻辑和标签都是零填充的,所以损失是不正确的.从这个答案,https://stackoverflow.com/a/38502547/3974129,我试图改变tf.ones(.)部分对重量张量,但它们的基本情况与我的太不同。

我有如下所示的步长信息,并且在训练时给他们喂食。

代码语言:javascript
复制
self._x_len = tf.placeholder(tf.int64, shape=[self._batch_size])

例如,我为大小为5的批处理提供长度信息3、10、2、3、1,它们也用于sequence_length中的tf.nn.rnn()。

我可以想到的一种方法是迭代x_len,并在每个权重中使用每一项作为最后1的索引。

0 0 0.0 0 0 => 1 1.1 0 0 0 尺寸为100的重量张量(最大时间步长)

但是正如你所知道的,我不能使用张量内的值作为指数,因为它们还没有被喂入。

我怎么能做这样的重量张量呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-03 06:22:31

使用tensorflow creating mask of varied lengthsrnn.py解决了问题。我可以为每一个最大的步骤建立索引,并屏蔽它们。

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

https://stackoverflow.com/questions/39772033

复制
相关文章

相似问题

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