尝试使用tensorflow创建展开的RNN模型,并看到我不理解的错误消息。最终,尝试使用多步超前进行简单的时间序列预测,其中输入向量是一组回溯窗口样本(每个10步长,每个特征1个),响应集样本是下一个(5)步骤每个10步回溯窗口的系列。
在这里您可以看到数据集的尺寸和预期的RNN细胞神经元
n_samples = int( data_x.get_shape()[0] )
n_input_steps = int( data__x.get_shape()[1] )
n_inputs = int( tx.get_shape()[2] )
n_neurons = 7 # small for demo purposes
n_output_steps = int( data_y.get_shape()[1] )
n_outputs = int( data_y.get_shape()[2] )
print (n_samples, n_input_steps, n_inputs, n_neurons, n_output_steps, n_outputs)
#output
(97, 10, 1, 7, 5, 1)
和展开的模型代码
# params section
X = tf.placeholder(tf.float64, [None, n_input_steps, n_inputs])
print X.get_shape()
y = tf.placeholder(tf.float64, [None, n_output_steps, n_outputs])
print y.get_shape()
cell = tf.nn.rnn_cell.LSTMCell(name='basic_lstm_cell', num_units=n_neurons, activation=tf.nn.relu, use_peepholes=True)
# wrap in fully connect single output projection
fc_cell = tf.contrib.rnn.OutputProjectionWrapper(cell, output_size=n_outputs, reuse=tf.AUTO_REUSE)
outputs, states = tf.nn.dynamic_rnn(cell=fc_cell, inputs=X, dtype=tf.float64)
"""
expecting unrolled RNN:
y[0] .... y[n_input_steps]
| |
* -> ... -> *
| .... |
x[0] x[n_input_steps]
where each * is an RNN cell with a single output
"""
尝试设置此RNN时抛出的完整错误消息如下
(?, 10, 1)
(?, 5, 1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-204-d52a40d9a302> in <module>()
10 fc_cell = tf.contrib.rnn.OutputProjectionWrapper(cell, output_size=n_outputs, reuse=tf.AUTO_REUSE)
11
---> 12 outputs, states = tf.nn.dynamic_rnn(cell=fc_cell, inputs=X, dtype=tf.float64)
13
....
....
....
/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variable_scope.pyc in _get_single_variable(self, name, shape, dtype, initializer, regularizer, partition_info, reuse, trainable, collections, caching_device, validate_shape, use_resource, constraint, synchronization, aggregation)
864 raise ValueError("Trying to share variable %s, but specified shape %s"
865 " and found shape %s." % (name, shape,
--> 866 found_var.get_shape()))
867 if not dtype.is_compatible_with(found_var.dtype):
868 dtype_str = dtype.name
ValueError: Trying to share variable rnn/output_projection_wrapper/basic_lstm_cell/kernel, but specified shape (8, 28) and found shape (4, 12).
ValueError中的这些数字是什么?很难弄清它们是如何产生的,因此很难调试上游出了什么问题。我的设置方式有什么根本性的错误吗?例如。而不是让data_x的形状为(?,10,1)和data_y的形状为(?,5,1),data_y的形状应该为(?,10,1)来匹配x的形状(其中data_y中的每个样本只是其中的对应序列) data_x上移了5步)?
不胜感激任何调试建议或修复程序。
答案 0 :(得分:0)
随机修改后,发现将代码的单元格创建片段更改为
cell = tf.nn.rnn_cell.LSTMCell(
name='basic_lstm_cell', num_units=n_neurons, activation=tf.nn.relu, reuse=tf.AUTO_REUSE)
# wrap cell in fully connect single output projection
fc_cell = tf.contrib.rnn.OutputProjectionWrapper(cell, output_size=n_outputs, reuse=tf.AUTO_REUSE)
(主要删除use_peepholes=True
)似乎可以防止错误的出现(应该注意,我从不真正知道什么地方是窥视孔,只是在一些代码片段时才将它们保留在那儿,但它们似乎具有影响某处的尺寸)。需要做更多的研究来解释这对代码的影响。