在Keras中出现输入数据不兼容错误,维度不匹配 ValueError

我在尝试理解如何在Keras上编写Conv1D模型,但一直遇到维度不匹配的错误。目前x_train的维度是[1000,294](1000个样本,每个样本有294个特征),而y_train的维度是[1000,9](1000个样本,每个样本有9个标签)。我不断收到错误消息,说期望3个维度但实际得到2个维度。我尝试修复它,但错误再次出现。GitHub上的一些问题建议使用Flatten(),但我已经使用了这个方法却没有解决问题。你们有什么想法吗?我错过了什么?谢谢

我得到的错误是,

  1. ValueError: 输入0与层conv1d_1不兼容:期望ndim=3,但找到ndim=2

代码如下所示

tb = [keras.callbacks.TensorBoard(log_dir='./dllogs')]main_input = Input(shape=(294, ), dtype='float32')x_train = np.array(x_train)y_train = np.array(y_train)x_dev = np.array(x_dev)y_dev = np.array(y_dev)x = Conv1D(128, 5, activation='relu')(main_input)x = MaxPooling1D(5)(x)x = Conv1D(128, 5, activation='relu')(x)x = MaxPooling1D(5)(x)x = Conv1D(128, 5, activation='relu')(x)x = MaxPooling1D(35)(x)x = Flatten()(x)x = Dropout(0.25)(x)x = Dense(128, activation='relu')(x)preds = Dense(pred_dim, activation='softmax')(x)model = Model(inputs=main_input, outputs=preds)model.compile(optimizer='adam', loss='kullback_leibler_divergence', metrics=['accuracy'])print(model.summary())history_NN = model.fit(x_train, y_train, batch_size=BATCHSIZE, epochs=EPOCHS, callbacks=tb, validation_data=(x_dev, y_dev))

回答

  1. 维度问题一直困扰着我,这个问题在Today的评论中得到了解决。
    1. 接下来是池化维度的问题,这是池化后维度的减少,所以在整个过程中,最终的池化没有35个滑动窗口,当我改变它时,问题得到了解决。

修改后的代码,

tb = [keras.callbacks.TensorBoard(log_dir='./dllogs')]main_input = Input(shape=(294, 1))#已更改x_train = np.array(x_train)y_train = np.array(y_train)x_dev = np.array(x_dev)y_dev = np.array(y_dev)x_train = np.expand_dims(x_train, axis=-1) #已更改x_dev = np.expand_dims(x_dev, axis=-1) #已更改x = Conv1D(128, 5, activation='relu')(main_input)x = MaxPooling1D(5)(x)x = Conv1D(128, 5, activation='relu')(x)x = MaxPooling1D(5)(x)x = Conv1D(128, 5, activation='relu')(x)x = MaxPooling1D(11)(x)x = Flatten()(x)x = Dropout(0.25)(x)x = Dense(128, activation='relu')(x)preds = Dense(pred_dim, activation='softmax')(x)model = Model(inputs=main_input, outputs=preds)model.compile(optimizer='adam', loss='kullback_leibler_divergence', metrics=['accuracy'])print(model.summary())history_NN = model.fit(x_train, y_train, batch_size=BATCHSIZE, epochs=EPOCHS, callbacks=tb, validation_data=(x_dev, y_dev))

回答:

Conv1D层期望输入的形状为(sequence_length, num_features)序列。看起来你有长度为294的序列,每个序列只有一个特征;因此,每个输入样本需要具有(294,1)的形状(而不是(294,))。为了修复这个问题,你可以使用np.expand_dims为你的输入数据添加一个大小为1的第三维:

x_train = np.expand_dims(x_train, axis=-1)x_dev = np.expand_dims(x_dev, axis=-1)main_input = Input(shape=(294, 1)) # 同样在这里修复输入形状

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注