当前位置: 首页 > 知识库问答 >
问题:

LSTM神经网络输入/输出尺寸误差

韦望
2023-03-14

我对TensorFlow和LSTM架构相当陌生。我在计算数据集的输入和输出(x_train、x_test、y_trainy_test)时遇到了问题。

我最初输入的形状:

  • X_列车:(366,4)

Ytrain和Ytest是一系列股票价格。Xtrain和Xtest是我想学习的四个预测股价的功能

# Splitting the training and testing data

train_start_date = '2010-01-08'
train_end_date = '2017-01-06'
test_start_date = '2017-01-13'
test_end_date = '2019-01-04'

train = df.ix[train_start_date : train_end_date]
test = df.ix[test_start_date:test_end_date]


X_test = sentimentScorer(test)
X_train = sentimentScorer(train)

Y_test = test['prices'] 
Y_train = train['prices']

#Conversion in 3D array for LSTM INPUT

X_test = X_test.reshape(1, 104, 4)
X_train = X_train.reshape(1, 366, 4)





model = Sequential()

model.add(LSTM(128, input_shape=(366,4), activation='relu', 
return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(128, activation='relu'))
model.add(Dropout(0.1))

model.add(Dense(32, activation='relu'))
model.add(Dropout(0.2))

model.add(Dense(10, activation='softmax'))

opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)

# Compile model
model.compile(
    loss='sparse_categorical_crossentropy',
    optimizer=opt,
    metrics=['accuracy'],
)

model.fit(X_train,
          Y_train,
          epochs=3,
          validation_data=(X_test, Y_test))

这是产生的错误:

---------------------------------------------------------------------------ValueError回溯(最近一次呼叫最后一次)在65辆Y_列车中,66个时代=3---

c:\users\talal\appdata\local\programs\python\36\lib\site packages\tensorflow\python\keras\engine\training.py in fit(self、x、y、批大小、历元、冗余、回调、验证分割、验证数据、洗牌、类权重、样本权重、初始历元、每个历元的步骤、验证步骤、**kwargs)1507个步骤,1508步=每个历元的步数-

C:\用户\talal\appdata\本地\程序\python\python36\lib\site-包\tensorflow\python\keras\引擎\training.py_standardize_user_data(自我,x,y,sample_weight,class_weight,batch_size,check_steps,steps_name,步骤,validation_split)991 x,y=next_element992 x,y,sample_weights=自我。_standardize_weights(x, y,sample_weight,--

c:\users\talal\appdata\local\programs\python36\lib\site packages\tensorflow\python\keras\engine\training.py in\u-standard\u-weights(self、x、y、sample\u-weight、class\u-weight、batch\u-size)1110进给输入形状,1111
检查批处理轴=False,不强制执行批处理大小-

C:\用户\talal\appdata\本地\程序\python\python36\lib\site-包\tensorflow\python\keras\引擎\training_utils.py在standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix)314:预期的名称[i]具有315 str(len(形状))'尺寸,但有数组'-

ValueError:检查输入时出错:预期lstm_18_输入有3个维度,但得到了具有形状的数组(366,4)

共有3个答案

戚阳曜
2023-03-14

>

  • LSTM希望DIM的输入为(num_示例、seq_长度、input_dims),因此输入中有一个错误。

    您正在预测维度1的输出,模型输出为10。试试这个。

    model.add(密集(1,activation='linear'))

    另外,你在预测价格,这是回归问题。但是,您正在使用分类设置。试试这个

    model.compile(loss='mse',optimizer='adam',metrics=['mean\u squared\u error'])

  • 须曜文
    2023-03-14

    X_train的尺寸错误。LSTM仅接受三维输入。您的意思是您有4个功能。假设366是一个样本的时间戳数,那么您的输入应该是(num_samples,366,4)shape cheers:-)

    戚宏扬
    2023-03-14

    你的代码几乎是好的。

    您的y_测试y_序列应该是一个具有一个元素或形状(1,1)的数组,这无关紧要。

    您输入的形状是错误的,第一个LSTM应该是:

    model.add(LSTM(128, input_shape=(None,4), activation='relu', return_sequences=True))
    

    请注意None,由于测试序列和训练序列长度不同,您不能指定它(并且Keras接受未指定的第一维度)。错误是由于长度分别为366和104。如果您想使用带有RNN的批处理,您应该使用keras.preprocessing.sequence.pad\u sequences执行零填充。

    无需指定批处理的input\u shape,网络的其余部分应该可以。

    如果您正在执行回归,而不是分类(可能是这种情况),那么您应该执行@Ankish Bansal编写的最后两个步骤,例如,将损失更改为均方误差,并使最后一层输出1而不是10。

     类似资料:
    • 我试图用PyTorch LSTM训练一个简单的2层神经网络,但我很难解释PyTorch留档。具体来说,我不太确定如何处理我的训练数据。 我想做的是通过小批次在一个非常大的数据集上训练我的网络,每个批次有100个元素长。每个数据元素将具有5个特征。留档声明层的输入应该是形状(seq_len,batch_size,input_size)。我应该如何调整输入? 我一直在关注这篇文章:https://di

    • 问题内容: 我试图使用keras训练LSTM模型,但我认为这里出了点问题。 我有一个错误 ValueError:检查输入时出错:预期lstm_17_input具有3个维,但数组的形状为(10000,0,20) 虽然我的代码看起来像 其中已的形状和前几个数据点像 并且具有这样的形状的,它是二进制(0/1)标签阵列。 有人可以指出我在哪里错了吗? 问题答案: 为了完整起见,这是发生了什么。 首先,像K

    • 我正在实现一个三维卷积神经网络,我有两个问题。 问题一 每个输入是一个大小为(201,10,4)的3D矩阵。我希望我的过滤器能够在第二和第三维度上移动,因为它们是完全连接的。第三个维度是特征维度。所以我不想看第二和第三维度的当地社区。因此,我的过滤器大小将是例如(3,10,4)的大小。所以过滤器大小等于第二和第三维度,但我们在第一维度中有权重共享。以下是我的卷积代码: 所以我应该在这里使用步幅,这

    • 问题内容: 我正在尝试使用Keras实施LSTM。 我知道Keras中的LSTM需要3D张量与形状作为输入。但是,我不能完全确定输入在我的情况下的样子,因为我对每个输入只有一个观察样本,而不是多个样本,即。将我的每个输入分成长度样本是否更好?对我而言,大约有几百万个观测值,因此在这种情况下,每个样本应保留多长时间,即我将如何选择? 另外,我是对的,这个张量应该看起来像: 其中M和N如前所述,x对应

    • 我正在开发一种卷积神经网络用于图像分类或更好的车牌分类。这些车牌最多包含8个字符,每个字符可以包含37个字符(A-Z、0-9和空格)。我现在想知道如何设计网络中的最后两层。我认为,最后一个必须是具有37个概率的softmax层。这应该完全连接到一个(?)神经元在前一层?我想,在前一层我们需要8个神经元,因为之前的车牌上有8个字符,但我不确定。在此层之前,我添加了一些卷积层和maxPooling层。

    • 使用网格的列来设置输入框的大小,如 .large-6, .medium-6, 等。 更多网格系统知识,可以点击 相等大小列 以下演示了相等大小列的实例: 实例<form>   <div>     <div>       <label>medium-4 (100% on small, stacked)         <input type="text" placeholder="Name">