Бинарная классификация с использованием softmax LSTM - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь спроектировать двунаправленный LSTM с использованием функций word2vec для задачи двоичной классификации.

my_model=Sequential()

my_model.add(Embedding(words,10,input_length=trainDataVecs.shape[1],weights=[embedding_matrix],trainable=True))
my_model.add(Bidirectional(LSTM(20,activation='tanh',init='glorot_uniform',recurrent_dropout = 0.2, dropout = 0.2)))

Поскольку существует два класса,

my_model.add(Dense(2, activation='softmax'))

def auc(y_true, y_pred):
    auc = tf.metrics.auc(y_true, y_pred)[1]
    K.get_session().run(tf.local_variables_initializer())
    return auc

Использование AUC в качестве метрики

print "Compiling..."
optimizer=RMSprop(lr=0.0001, rho=0.9, epsilon=1e-08)
my_model.compile(optimizer=optimizer,
               loss='categorical_crossentropy',
                  metrics=[auc])

my_model.fit(trainDataVecs, Y_train, shuffle = True, batch_size = 10, epochs=20)

Но я получаю: ValueError: Error when checking target: expected dense_2 to have shape (2,) but got array with shape (1,), поскольку Y_train является 1-D.Я могу использовать sigmoid вместо softmax, но это даст мне вероятность, когда я буду предсказывать.Мои метки 0 или 1.Следовательно, я хочу видеть F-показатель между предсказанными и реальными значениями.

...