如何在带有Keras和Tensorflow的Python LSTM网络中获得多个输出?

2024-04-25 08:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次使用Keras中的LSTMs和Python中的Tensorflow,我想创建一个带有一些层的神经网络,它给出10个输出值。我在一个神经网络中生成了多层,然后我创建了一个由10个元素组成的输出密度层。我有下一个代码:

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个元素。你知道吗


Tags: fromimportnumpypandassizemodelbacktrain
1条回答
网友
1楼 · 发布于 2024-04-25 08:30:34

从上面所说的情况来看,错误ValueError: Error when checking target: expected dense_1 to have shape (10,) but got array with shape (1,)是由于目标中的问题造成的:

  • 您有一个目标值列表。你知道吗
  • 你试着预测十个值,而只有一个值可以比较。你知道吗

您需要重新编写Trany matrx,以包含您希望预测的每个值。 例如,如果您希望在最近的将来预测5个值,则需要一条大小为5的目标线(即每个元素),包括所有值。你知道吗

因此,您将训练网络预测5个未来值。 我会尽量给你的代码,但这只是一个重塑与滚动获得未来的价值观。你知道吗

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

相关问题 更多 >