ValueError:尝试共享变量rnn / multi_rnn_cell / cell_0 / lstm_cell / kernel

时间:2018-08-03 02:44:39

标签: python-3.x tensorflow lstm rnn

代码:

<div align="center">put the bokeh plot here</div>

错误:

import tensorflow as tf
from tensorflow.python.ops import rnn_cell

cell = rnn_cell.LSTMCell(64, state_is_tuple=True)
multi_layer_cell = tf.nn.rnn_cell.MultiRNNCell([cell for i in range(2)])
x = tf.placeholder("float", [None, 10, 1])
output, state = tf.nn.dynamic_rnn(multi_layer_cell, x, dtype = tf.float32)

版本: Tensorflow 1.2.1 Python 3.5.4

此处的变体似乎不起作用:ValueError: Trying to share variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/kernel

1 个答案:

答案 0 :(得分:0)

问题是您要创建一个重复两次的相同对象的列表

mHelper = new IabHelper(this, getResources().getString(R.string.launch));
        mHelper.enableDebugLogging(true, "Proc");
        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    // Do nothing
                } else {
                    mHelper.queryInventoryAsync(mGotInventoryListener);
                }
            }
        });

单元不仅为多层单元指定参数,还直接使用对象。但是,对于您的神经网络,您的第一个单元将映射大小为1到64的输入,然后第二个单元将映射到64到64。

您看到的形状是每个单元格的内核大小,至少应该是它们的大小。 LSTM内核可以看成大小n + m x 4m,其中n是输入大小,m是状态大小。因子4来自以下事实:有4个门需要矩阵权重。 n + m来自将输入->栅极过渡堆叠在状态->栅极过渡之上。例如,在您的第一个单元格中,n = 1且m = 64,因此您看到大小为(65,256),这显然不适用于需要大小为(128,256)内核的第二个单元格(因为64 + 64 = 128而不是65)。

要解决此问题,只需制作两个不同的单元格对象:

multi_layer_cell = tf.nn.rnn_cell.MultiRNNCell([cell for i in range(2)])