【问题标题】:Tensorflow seq2seq regression modelTensorFlow seq2seq 回归模型
【发布时间】:2019-04-09 02:49:34
【问题描述】:

我有一个简单的 seq2seq 模型来预测股票价格。我创建了一个 lstm 单元的编码器和解码器,它将预测接下来的 5 个时间步值。但是它会引发错误:

ValueError: Dimensions must be equal, but are 517 and 562 for 'rnn/while/rnn/multi_rnn_cell/cell_0/lstm_cell/MatMul_1' (op: 'MatMul') with input shapes: [10,517], [562,2048].

数据样本

               t1     t2     t3     t4    t5 ...
19/10/2018   0.005  0.100 -0.021 0.030 -0.025
20/10/2018   0.023  0.020  0.020 0.130  0.125
21/10/2018  -0.205  0.140 -0.011 0.020 -0.305

代码

import tensorflow as tf
import numpy as np

seq_len = 1
n_inputs = 50
n_outputs = 5
n_layers = 3
n_neurons = 512
batch_size = 10

g = tf.Graph()

with g.as_default():
  X = tf.placeholder(tf.float32,shape=(None,seq_len,n_inputs),name="X")
  y = tf.placeholder(tf.float32,shape=(None,seq_len,n_outputs),name="y")

  cells = tf.nn.rnn_cell.MultiRNNCell([ tf.nn.rnn_cell.LSTMCell(n_neurons) for _ in range(n_layers) ])

  init_state = cells.zero_state(batch_size, tf.float32)
  enc_outputs, enc_states = tf.nn.dynamic_rnn(cells, X,initial_state=init_state)

  dec_outputs,dec_states = tf.nn.dynamic_rnn(cells, y, initial_state=enc_states)

  loss = tf.reduce_mean(tf.square(dec_outputs - y))
  train_op = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss)

  init = tf.global_variables_initializer()

sess = tf.Session(graph=g)
sess.run(init)

欢迎任何帮助。

【问题讨论】:

    标签: python-3.x tensorflow machine-learning seq2seq


    【解决方案1】:

    首先,我无法将您的问题标记为重复,因为它有赏金。您收到错误是因为您必须不要为第一层以及更深层重复使用相同的单元格。这是因为给它们的输入不同,这使得核矩阵不同。根据this 的帖子,这应该可以修复错误:

    # Extra function is for readability. No problem to inline it.
    def make_cell(lstm_size):
      return tf.nn.rnn_cell.BasicLSTMCell(lstm_size, state_is_tuple=True)
    
    network = rnn_cell.MultiRNNCell([make_cell(num_units) for _ in range(num_layers)], 
                                    state_is_tuple=True)
    

    Here 在这个问题上有更多帮助。

    【讨论】:

    • 我应该有相同数量的 n_inputs 和 n_outputs 吗?
    • @MariosNikolaou 我不太确定,因为我不太使用 tensorflow。但我认为你应该有相同的输出。祝你好运!
    • 你使用 keras 吗?
    • @MariosNikolaou -- 不,只有 tensorflow。
    • 编码器初始状态应该设置为零? init_state = cells.zero_state(batch_size, tf.float32)
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多