我正在使用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,因此在拟合时会出现错误。
答案 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
层,并在其后使用Conv1D
或LSTM
层