我有CNN并希望将其更改为LSTM,但当我修改我的代码时,我收到相同的错误:ValueError:输入0与图层gru_1不兼容:预期ndim = 3,发现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'))
我做错了什么? 感谢
答案 0 :(得分:2)
LSTM代码很好,它执行时没有任何错误。 您看到的错误与模型本身中的张量的内部不兼容性有关,与训练数据无关,在这种情况下,您将得到“例外:输入形状无效”
错误中令人困惑的是它引用的是GRU图层,它不包含在模型定义的任何位置。如果您的模型仅包含LSTM,则应该收到一个错误,该错误会调出与其冲突的LSTM图层。
也许检查
model.get_config()
并确保所有图层和配置都符合您的意图。 特别是,第一层应该这样说:
batch_input_shape': (None, 20, 41)