0

我正在学习如何使用LSTM RNN。 我看到了本教程:https://www.youtube.com/watch?v=SeffmcG42SY& 之后,我尝试应用所学知识并更改数据集。 问题是,我有点失去了所有的重塑,我真的不知道如何使用它们,为什么他们在这里... 我的数据集有7列和546行。 这里是我的超参数LSTM张量形状和超参数Tensorflow

# hyperparameters 
lr = 0.001 
training_iters = 100000 
batch_size = 64 

n_inputs = 7 # columns 
n_steps = 546 # rows 
n_hidden_units = 128 # neurons in hidden layer 
n_classes = 1 # class 

当我启动我的会议,它看起来像这样:

with tf.Session() as sess: 
    init = tf.global_variables_initializer() 
    sess.run(init) 
    step = 0 
    while step * batch_size < training_iters: 
     batch_xs, batch_ys = inputX, inputY 
     batch_xs = batch_xs.reshape([batch_size, n_steps, n_inputs]) 
     sess.run([train_op], feed_dict={ 
      x: batch_xs, 
      y: batch_ys, 
     }) 
     if step % 20 == 0: 
      print(sess.run(accuracy, feed_dict={ 
      x: batch_xs, 
      y: batch_ys, 
      })) 
     step += 1 

然后,我有一个错误消息

“不能重塑尺寸3822型数组形状(64,546,7)“

如果有人能解释我该如何工作和/或如何解决问题,那将非常棒!

谢谢

+0

为什么不打印张量形状以查看它们的尺寸? –

+0

输入应该是'[batch_size,time_steps,sample_dim]'。在你的数据集中,我假设每一行都有一个长度为7的序列数据。因此,选择N行将是你的'batch_size','time_steps'是7,如果它的'one-hot'编码向量是'sample_dim', –

+0

那么,我的批量大小是x:(546,7)和y:(546,1)。我的功能不是很热,所以如果我明白了,我不会有一个样本暗淡的参数? –

回答

2

LSTM单元具有输入与所述LSTM细胞被展开随时间的一个序列的不同的输入。而且由于我们使用批量学习算法,我们需要提供一批输入。因此,tesorflow中的LSTM输入具有形状(batch_size X时间步骤来展开X输入大小)。

在你的情况

  1. 的batch_size = 64
  2. 倍步骤展开= 546
  3. 输入大小= 7

基地,你的输入是如何(你是怎么做到的特征提取) ,您将不得不将其重塑为64 X 546 X 7(== 244608),如果您的输入尺寸是3822,那么这将导致失败

考虑从序列到序列预测的LSTM(一对一模型)。例如,假设你有一个句子列表(让我们说S句子)。假设你在每个句子中都有W字。现在您要预测每个句子中每个单词的词性标签。假设您将每个单词表示为一个热门编码,并且词汇大小为V.因此,热点编码矢量的大小将为V.

现在,您的LSTM模型输入形状将为(批量大小XWXV),其中批量大小是< < S,通常是32或64.

+0

感谢您的回应,我现在更了解这一点! –

相关问题