【问题标题】:Change CNN to LSTM keras tensorflow将 CNN 更改为 LSTM keras tensorflow
【发布时间】:2017-09-30 04:10:16
【问题描述】:

我有一个 CNN,想把它改成 LSTM,但是当我修改我的代码时,我收到了同样的错误:ValueError: Input 0 is incompatible with layer gru_1: expected ndim=3, found ndim=4

我已经更改了 ndim 但没有用。

关注我的cnn

def build_model(X,Y,nb_classes):
    nb_filters = 32  # number of convolutional filters to use
    pool_size = (2, 2)  # size of pooling area for max pooling
    kernel_size = (3, 3)  # convolution kernel size
    nb_layers = 4
    input_shape = (1, X.shape[2], X.shape[3])

    model = Sequential()
    model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
                        border_mode='valid', input_shape=input_shape))

    model.add(BatchNormalization(axis=1))
    model.add(Activation('relu'))

    for layer in range(nb_layers-1):
        model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
        model.add(BatchNormalization(axis=1))
        model.add(ELU(alpha=1.0))  
        model.add(MaxPooling2D(pool_size=pool_size))
        model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(128))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes))
    model.add(Activation("softmax"))
    return model

并按照我喜欢的方式来做我的 LSTM

data_dim = 41
timesteps = 20
num_classes = 10

model = Sequential()

model.add(LSTM(256, return_sequences=True, input_shape=(timesteps, data_dim)))  
model.add(Dropout(0.5))

model.add(LSTM(128, return_sequences=True, input_shape=(timesteps, data_dim)))  
model.add(Dropout(0.25))

model.add(LSTM(64))  
model.add(Dropout(0.2))

model.add(Dense(num_classes, activation='softmax'))

我做错了什么? 谢谢

【问题讨论】:

  • 您的 LSTM 代码运行良好。问题可能出在您的训练数据形状上。你能打印出你的训练数据的形状吗? X.shape and Y.shape

标签: python tensorflow keras lstm rnn


【解决方案1】:

LSTM 代码很好,对我来说执行没有错误。 您看到的错误与模型本身内张量的内部不兼容有关,与训练数据无关,在这种情况下,您将收到“异常:输入形状无效”

您的错误中令人困惑的是它指的是 GRU 层,该层不包含在您的模型定义中的任何位置。如果您的模型仅包含 LSTM,您应该会收到一个错误,指出与之冲突的 LSTM 层。

也许检查

model.get_config()

并确保所有层和配置都是您想要的。 特别是第一层应该这样说:

batch_input_shape': (None, 20, 41)

【讨论】:

  • 如果 OP 使用的数据是 4d 就不行了,这将是 Convolution2d()
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 2021-10-29
  • 2023-03-05
  • 2021-07-01
  • 2017-06-17
相关资源
最近更新 更多