在Keras模型中为Conv1D层提供输入时出错

时间:2018-10-03 10:46:24

标签: python machine-learning keras conv-neural-network tf-idf

我正在使用tf-idf矢量数据作为我的Keras模型的输入。 tf-idf向量具有以下形状:

<class 'scipy.sparse.csr.csr_matrix'> (25000, 310617)

代码:

inputs = Input((X_train.shape[1],))
convnet1=Conv1D(128,3,padding='same',activation='relu')(inputs)

错误:

  

ValueError:输入0与层conv1d_25不兼容:预期ndim = 3,找到ndim = 2

当我将输入转换为Input(None,X_train.shape[1],)时,由于输入尺寸已更改为3,因此在拟合时会出现错误。

1 个答案:

答案 0 :(得分:0)

如错误所述(即expected ndim=3, found ndim=2),Conv1D将3D数组作为输入。因此,如果您想向该数组提供数据,则首先需要调整其形状:

X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))

并相应地设置输入层的形状:

inputs = Input(X_train.shape[1:])

但是,Conv1D通常用于处理序列(如句子中的单词序列)或时间数据(如天气温度的时间序列)。这就是为什么它采用(num_samples, num_timesteps or sequence_len, num_features)形状的输入的原因。将其应用于没有任何顺序顺序的tf-idf表示形式可能没有那么有效。相反,我建议您使用Dense层。或者,也可以不使用tf-idf,也可以将原始数据(即文本或句子)直接输入Embedding层,并在其后使用Conv1DLSTM