带有Tf-Idf矩阵作为输入,但没有嵌入层的CNN?

时间:2019-05-20 18:01:00

标签: python keras scikit-learn conv-neural-network keras-layer

我正在尝试处理航空公司的推文数据集,并为此探索了几种可能性。我看到了其他一些教程,其中人们使用了计数矩阵(来自sklearn CountVectorizer),然后在其上使用了CNN,效果相当不错。 但是,使用以Tf-IDF矩阵作为输入(来自sklearn TfidfVectorizer)的基本ANN(3 * 100密集层),我可以获得更好的结果,所以我想将两者结合:带有Tf-Idf的CNN矩阵作为输入。 我可以这样:

model = Sequential()
model.add(layers.Embedding(input_dim=input_shape[1], output_dim=200, input_length=input_shape[1]))
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))
[rest of model]

但是我想删除嵌入层,因为我认为它对tf-idf矩阵没有多大帮助(可能是错误的,但是我想尝试)。 但是,当我运行此代码时:

model = Sequential()
model.add(layers.Conv1D(128, 5, activation='relu', input_shape=(90051, 1)))

模型构建和编译工作良好,但在拟合时出现以下错误: ValueError: Error when checking input: expected conv1d_3_input to have 3 dimensions, but got array with shape (10248, 90051) 我尝试按照 this SO answer所述重塑数据,如下所示:

tt = np.reshape(transformed, (transformed.shape[0], transformed.shape[1], 1))
print(tt.shape)
tt = transformed
tt.shape =  (transformed.shape[0], transformed.shape[1], 1)
print(tt.shape)

但是numpy重塑后数据形状保持不变(不知道为什么)。

所以有人可以指出我为什么做错了吗?从一开始这是一个坏主意,还是我应该离开嵌入层(结果不是那么好),还是应该以其他方式尝试重塑? 非常感谢您的帮助

0 个答案:

没有答案