Я использую Keras model.predict
, чтобы получить метку для новых предложений, отсутствующих в наборе данных. Но предсказание всегда дает одно и то же значение независимо от предложения.
Вот мой код предсказания
from sklearn.preprocessing import LabelEncoder
maxlen = 300
### PREDICT NEW UNSEEN DATA ###
tokenizer = Tokenizer()
label_enc = LabelEncoder()
label_enc.fit(tar_list)
X_test = ['asdsadav dawd','this is boring', 'wow i like this you did a great job', 'ima cry tht was mean','1 nov 1968 george harrison became the first beatle to release a solo album in the u k with the soundtrack to ']
X_test = tokenizer.texts_to_sequences(X_test)
X_test = sequence.pad_sequences(X_test, maxlen=maxlen)
print(X_test)
a = (model.predict(X_test)>0.5).astype(int).ravel()
print(a)
reverse_pred = label_enc.inverse_transform(a.ravel())
print(reverse_pred)
print(model.predict(X_test))
А вот результат
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
[1 0 1 0 1 0 1 0 1 0]
[1 0 1 0 1 0 1 0 1 0]
[[0.988675 0.01132498]
[0.988675 0.01132498]
[0.988675 0.01132498]
[0.988675 0.01132498]
[0.988675 0.01132498]]
Как мы Как видите, выходные данные вероятности одинаковы для каждого предложения.
Мой код для модели обучения:
model = Sequential()
model.add(Embedding(max_words, 300, input_length=max_len))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(SpatialDropout1D(0.5))
model.add(Conv1D(16, kernel_size=3, activation='relu'))
model.add(Bidirectional(LSTM(16)))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))
model.summary()
model.compile(loss='sparse_categorical_crossentropy', metrics=['accuracy'], optimizer = 'adam')
Это токенизатор, подходящий для X_train
max_words = 3000
max_len = 300
tok = Tokenizer(num_words = max_words)
tok.fit_on_texts(X_train)
sequences = tok.texts_to_sequences(X_train)
sequences_matrix = sequence.pad_sequences(sequences, maxlen = max_len)
print(sequences_matrix)
Y_train = np.array(Y_train)
Y_test = np.array(Y_test)
Выход это
[[ 0 0 0 ... 11 28 33]
[ 0 0 0 ... 2 125 63]
[ 0 0 0 ... 9 184 91]
...
[ 0 0 0 ... 105 22 85]
[ 0 0 0 ... 22 42 512]
[ 0 0 0 ... 9 28 406]]