【问题标题】:ValueError: Input 0 is incompatible with layer repeat_vector_58: expected ndim=2, found ndim=3ValueError:输入 0 与层 repeat_vector_58 不兼容:预期 ndim=2,发现 ndim=3
【发布时间】:2023-08-07 22:30:01
【问题描述】:

我正在尝试构建入侵检测 LSTM 和自动编码器。但是我无法理解为什么 repeat_vector_58 需要 ndim=3。我无法弄清楚这一点。以下是我的代码:

x_train.shape: (8000, 1, 82)

x_test.shape: (2000, 1, 82)

x_train = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
x_test = np.reshape(testT, (testT.shape[0], 1, testT.shape[1]))

start = time.time()
model = Sequential()
model.add(LSTM(128, activation='relu',recurrent_dropout=0.5,return_sequences=True,input_dim=82))
model.add(RepeatVector(82))
model.add(Dropout(0.3))
model.add(LSTM(64, activation='relu',recurrent_dropout=0.5,return_sequences=False))
model.add(Dropout(0.3))
model.add(TimeDistributed(Dense(1,activation='softmax')))

ValueError: Input 0 is incompatible with layer repeat_vector_58: expected ndim=2, found ndim=3

【问题讨论】:

    标签: python keras deep-learning lstm autoencoder


    【解决方案1】:

    LSTM 层需要 3 维输入,因为它是循环层。预期的输入是(batch_size, timesteps, input_dim)。 规范 input_dim=82 需要 2-dim 输入,但预期输入是 3-dim。
    因此,解决您的错误的方法是将input_dim=82 更改为input_shape=(82,1)

    model = Sequential()
    model.add(LSTM(128,activation='relu',recurrent_dropout=0.5,return_sequences=True,input_shape=(82,1)))
    

    【讨论】: