[英]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)
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)
謝謝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)
這是一個非常經典的問題LSTM
在Keras
。 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.