首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候应该在LSTM代码中初始化状态?

什么时候应该在LSTM代码中初始化状态?
EN

Stack Overflow用户
提问于 2017-08-04 09:04:44
回答 1查看 591关注 0票数 3

这是UDACITY中用于情感分类的LSTM代码。

下面是整个句子的链接-rnn代码:udacity/sentiment-rnn

我想知道为什么他们会在for循环的正下方初始化cell状态。

我认为当输入语句改变时,单元状态必须是零初始化,所以它必须在mini-batch for loop语句下。

代码语言:javascript
复制
## part of the sentence-rnn code
# Getting an initial state of all zeros
initial_state = cell.zero_state(batch_size, tf.float32)

with tf.Session(graph=graph) as sess:
    sess.run(tf.global_variables_initializer())
    iteration = 1
    for e in range(epochs):
        state = sess.run(initial_state)    ###### i think this line

        for ii, (x, y) in enumerate(get_batches(train_x, train_y, batch_size), 1):
            ###### should be here
            feed = {inputs_: x,
                    labels_: y[:, None],
                    keep_prob: 0.5,
                    initial_state: state}
            loss, state, _ = sess.run([cost, final_state, optimizer], feed_dict=feed)

有谁能解释原因吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-03-12 18:10:57

如果影响较低,则

  1. 零状态初始化是一个很好的做法

初始化RNN状态的默认方法是使用零状态。这通常效果很好,特别是对于像语言建模这样的序列到序列任务,其中受初始状态显著影响的输出比例很小。

每个批次中的

  1. 零状态初始化可能会导致

过度拟合

每个批次的零初始化将导致以下情况:序列到序列模型早期步骤的损失(即,状态重置后立即的损失)将大于后续步骤的损失,因为历史记录较少。因此,它们在学习过程中对梯度的贡献将相对较高。但是,如果所有状态重置都与零状态相关联,则模型可以(并且将)学习如何精确地补偿这一点。随着状态重置与总观测值之比的增加,模型参数将越来越多地调整到此零状态,这可能会影响后续时间步长的性能。

  1. 我们还有其他选择吗?

一种简单的解决方案是使初始状态变得有噪声(以减少第一时间步的损失)。在这里查找details and other ideas

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

https://stackoverflow.com/questions/45496751

复制
相关文章

相似问题

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