簡體   English   中英

Keras LSTM:檢查模型輸入尺寸時出錯

[英]Keras LSTM: Error when checking model input dimension

我是keras的新用戶,並嘗試實現LSTM模型。 對於測試,我聲明了如下所示的模型,但由於輸入維度的不同而失敗。 雖然我在這個網站上發現了類似的問題,但我自己找不到自己的錯誤。

ValueError: 
Error when checking model input: 
expected lstm_input_4 to have 3 dimensions, but got array with shape (300, 100)

我的環境

  • python 3.5.2
  • keras 1.2.0(Theano)

 from keras.layers import Input, Dense from keras.models import Sequential from keras.layers import LSTM from keras.optimizers import RMSprop, Adadelta from keras.layers.wrappers import TimeDistributed import numpy as np in_size = 100 out_size = 10 nb_hidden = 8 model = Sequential() model.add(LSTM(nb_hidden, name='lstm', activation='tanh', return_sequences=True, input_shape=(None, in_size))) model.add(TimeDistributed(Dense(out_size, activation='softmax'))) adadelta = Adadelta(clipnorm=1.) model.compile(optimizer=adadelta, loss='categorical_crossentropy', metrics=['accuracy']) # create dummy data data_size = 300 train = np.zeros((data_size, in_size,), dtype=np.float32) labels = np.zeros((data_size, out_size,), dtype=np.float32) model.fit(train, labels) 

編輯1(在MarcinMożejko的評論之后不起作用)

謝謝MarcinMożejko。 但我有類似的錯誤,如下所示。 我更新了虛擬數據以供檢查。 這段代碼有什么問題?

ValueError:檢查模型目標時出錯:預期timedistributed_36有3個維度,但得到的數組有形狀(208,1)

def create_dataset(X, Y, loop_back=1):
    dataX, dataY = [], []
    for i in range(len(X) - loop_back-1):
        a = X[i:(i+loop_back), :]
        dataX.append(a)
        dataY.append(Y[i+loop_back, :])
    return np.array(dataX), np.array(dataY)

data_size = 300
dataset = np.zeros((data_size, feature_size), dtype=np.float32)
dataset_labels = np.zeros((data_size, 1), dtype=np.float32)

train_size = int(data_size * 0.7)
trainX = dataset[0:train_size, :]
trainY = dataset_labels[0:train_size, :]
testX = dataset[train_size:, :]
testY = dataset_labels[train_size:, 0]
trainX, trainY = create_dataset(trainX, trainY)
print(trainX.shape, trainY.shape) # (208, 1, 1) (208, 1)

# in_size = 100
feature_size = 1
out_size = 1
nb_hidden = 8

model = Sequential()
model.add(LSTM(nb_hidden, 
               name='lstm',
               activation='tanh',
               return_sequences=True,
               input_shape=(1, feature_size)))

model.add(TimeDistributed(Dense(out_size, activation='softmax')))
adadelta = Adadelta(clipnorm=1.)
model.compile(optimizer=adadelta,
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(trainX, trainY, nb_epoch=10, batch_size=1)

這是一個非常經典的問題LSTMKeras LSTM輸入形狀應為2d - 具有形狀(sequence_length, nb_of_features) 附加的第三維來自示例維度 - 因此饋送到模型的表具有形狀(nb_of_examples, sequence_length, nb_of_features) 這是您的問題所在。 請記住, 1-d序列應呈現為具有形狀(sequence_length, 1)2-d數組。 這應該是LSTM的輸入形狀:

model.add(LSTM(nb_hidden, 
           name='lstm',
           activation='tanh',
           return_sequences=True,
           input_shape=(in_size, 1)))

並記住將您的輸入reshape為適當的格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM