如何使用Keras和Tensorflow在Python中的LSTM网络中获得多个输出



我第一次使用Keras中的LSTM和Python中的Tensorflow,我想创建一个具有一些层的神经网络,它可以提供10个输出值。我在神经网络中生成了多个层,并创建了一个由10个元素组成的输出DenseLayer。我有下一个代码:

from pandas import DataFrame
from pandas import Series
from pandas import concat
from pandas import read_csv
from pandas import datetime
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from math import sqrt
from matplotlib import pyplot
import numpy
from numpy import array
import math

# convert an array of values into a dataset matrix
def create_dataset(dataset, look_back):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return numpy.array(dataX), numpy.array(dataY)
look_back = 10
epochs = 1000
batch_size = 50
data = data.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(data)

# split into train and test sets
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

# reshape input to be [samples, time steps, features]
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))

# create and fit the LSTM network
model = Sequential()
model.add(LSTM(100, activation = 'tanh', inner_activation = 'hard_sigmoid', return_sequences=True))#, input_shape=(1, look_back)))
model.add(LSTM(50, activation = 'tanh', inner_activation = 'hard_sigmoid', return_sequences=True))
model.add(LSTM(25, activation = 'tanh', inner_activation = 'hard_sigmoid'))
# I want 10 outputs    
model.add(Dense(10))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=epochs, batch_size=batch_size, verbose=2)

但当我执行代码时,我会收到下一条错误消息:

ValueError: Error when checking target: expected dense_1 to have shape (10,) but got array with shape (1,)

我能做些什么来解决这个问题?我想给我下一个10个元素的预测,这就是为什么我放了最后一层10个元素。

根据您上面所说的,错误ValueError: Error when checking target: expected dense_1 to have shape (10,) but got array with shape (1,)是由于您的目标中的问题:

  • 您有一个作为目标的值列表
  • 你试图预测十个值,而只有一个可供比较

您需要重新生成trainY matrx,以包含您希望预测的每个值。例如,如果你想在最近的将来预测这5个值,你需要一个大小为5的目标行(即每个元素(,包括所有值。

因此,您将训练网络来预测5个未来值。我会试着给你代码howerver,它只是一个用滚动来获得未来价值的重塑。

更准确地说,对于1 X(一个输入(,您需要一个y=[v1,v2,v3,v4,v5]所以如果你有train = [X1,X2,..],那么Y = [[v1,v2,v3,v4,v5],[v2,v3,v4,v5,v6]

最新更新