Я пытаюсь запустить нейронную сеть для ввода текста.Это бинарная классификация.Вот мой рабочий код:
df = pd.read_csv(pathname, encoding = "ISO-8859-1")
df = df[['content_cleaned', 'meaningful']] #Content cleaned: text, meaningful: label
X = df['content_cleaned']
y = df['meaningful']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21)
tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(X_train)
X_train_encoded = tokenizer.texts_to_sequences(X_train)
X_test_encoded = tokenizer.texts_to_sequences(X_test)
max_len = 100
X_train = pad_sequences(X_train_encoded, maxlen=max_len)
X_test = pad_sequences(X_test_encoded, maxlen=max_len)
batch_size = 100
max_words = 100
input_dim = X_train.shape[1] # Number of features
model = Sequential()
model.add(layers.Dense(10, activation='relu', input_shape=X_train.shape[1:]))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit(X_train, X_test,
batch_size=batch_size,
epochs=5,
verbose=1,
validation_split=0.1)
Мой вопрос состоит из двух частей.Первый с input_shape
при создании слоев.Я смущен относительно синтаксиса объявления этого.При выполнении этой команды:
print(X_train.shape)
Я получаю эту форму: (3609, 100)
.
Насколько я понимаю, это говорит мне о том, что существует 3609 экземпляров.Из других примеров я наивно предположил, что нужно использовать 100, поскольку есть 100 типов (возможно, неправильно это понимающих), соответствующих max_words
, который я инициализировал.Я полагаю, что я мог неправильно выполнить синтаксис при инициализации input_shape
.
Второй вопрос - с сообщением об ошибке при запуске всего этого (скорее всего, с неправильным input_shape
).Сообщение об ошибке выделяет эту строку кода:
validation_split=0.1)
Сообщение об ошибке:
ValueError: Error when checking target: expected dense_2 to have shape (None, 1) but got array with shape (1547, 1
Неправильно ли я решаю эту проблему?Я очень плохо знаком с Deep Learning.