我正在尝试处理航空公司的推文数据集,并为此探索了几种可能性。我看到了其他一些教程,其中人们使用了计数矩阵(来自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重塑后数据形状保持不变(不知道为什么)。
所以有人可以指出我为什么做错了吗?从一开始这是一个坏主意,还是我应该离开嵌入层(结果不是那么好),还是应该以其他方式尝试重塑? 非常感谢您的帮助