в этом фиктивном примере я использую Conv1D с 2D функциями. Conv1D принимает в качестве входных последовательностей в 3D формате (n_samples, time_steps, features). Если вы используете 2D-функции, вам необходимо адаптировать их к 3D. нормальным выбором является рассмотрение ваших функций, поскольку это просто расширение временного измерения (expand_dims на оси 1), нет причин предполагать позиционный / временной шаблон для tfidf / one-hot features.
Когда вы создаете свою NN вы начинаете с трехмерного измерения и должны переходить к 2D. для перехода от 3D к 2D есть много возможностей, простой пост является сглаженным, с 1 временным затемнением слой объединения бесполезен. если вы используете softmax в качестве последнего слоя активации, не забудьте передать вашему плотному слою размерность, равную количеству ваших классов
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
## define variable
n_sample = 10229
text_len = 100
## create dummy data
X_train = np.random.uniform(0,1, (n_sample,text_len))
y_train = np.random.randint(0,2, n_sample)
## expand train dimnesion: pass from 2d to 3d
X_train = np.expand_dims(X_train, axis=1)
print(X_train.shape, y_train.shape)
## create model
inp = Input(shape=(1,text_len))
conv2 = Conv1D(filters=128, kernel_size=5, activation='relu', padding='same')(inp)
drop21 = Dropout(0.5)(conv2)
conv22 = Conv1D(filters=64, kernel_size=5, activation='relu', padding='same')(drop21)
drop22 = Dropout(0.5)(conv22)
pool2 = Flatten()(drop22) # this is an option to pass from 3d to 2d
out = Dense(2, activation='softmax')(pool2) # the output dim must be equal to the num of class if u use softmax
model = Model(inp, out)
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, epochs=5)