при проверке цели: ожидается, что плотность_2 будет иметь форму (1,), но получен массив с формой (2,) - PullRequest
0 голосов
/ 13 июня 2019

анализ чувств с помощью csv содержит 45k с двумя столбцами [text, sentiment], пытается использовать сигмоид с binary_crossentropy, но возвращает ошибку:

Ошибка при проверке цели: ожидается, что плотность_2 имеет форму (1,), но получил массив с формой (2,)

Я пытался использовать LabelEncoder, но его возвращение, неправильная форма ввода, как я могу позволить кодировке, приемлемой для Sigmond 1, плотной?

#I do aspire here to have balanced classes
num_of_categories = 45247
shuffled = data.reindex(np.random.permutation(data.index))
e = shuffled[shuffled['sentiment'] == 'POS'][:num_of_categories]
b = shuffled[shuffled['sentiment'] == 'NEG'][:num_of_categories]
concated = pd.concat([e,b], ignore_index=True)
for idx,row in data.iterrows():
    row[0] = row[0].replace('rt',' ')
#Shuffle the dataset
concated = concated.reindex(np.random.permutation(concated.index))
concated['LABEL'] = 0

#encode the lab
encoder = LabelEncoder()
concated.loc[concated['sentiment'] == 'POS', 'LABEL'] = 0
concated.loc[concated['sentiment'] == 'NEG', 'LABEL'] = 1
print(concated['LABEL'][:10])
labels = encoder.fit_transform(concated)
print(labels[:10])
if 'sentiment' in concated.keys():
    concated.drop(['sentiment'], axis=1)

n_most_common_words = 8000
max_len = 130
tokenizer = Tokenizer(num_words=n_most_common_words, filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~', lower=True)
tokenizer.fit_on_texts(concated['text'].values)
sequences = tokenizer.texts_to_sequences(concated['text'].values)
word_index = tokenizer.word_index

1 Ответ

1 голос
/ 14 июня 2019

Выход LabelEncoder, если также 1 дим, я думаю, выход вашей сети имеет два димма. Так что вам нужно по-горячему свою y_true.

использовать

labels = keras.utils.to_categorical(concated['LABEL'], num_classes=2)

вместо

labels = encoder.fit_transform(concated)
...