отрицательная выборка для задачи классификации с тензорным потоком nce - PullRequest
0 голосов
/ 01 августа 2020

Я работаю над моделью, выполняющей задачу классификации, которая выглядит так:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, 150, 300)          1958100   
_________________________________________________________________
dropout (Dropout)            (None, 150, 300)          0         
_________________________________________________________________
separable_conv1d (SeparableC (None, 150, 64)           20164     
_________________________________________________________________
separable_conv1d_1 (Separabl (None, 150, 64)           4352      
_________________________________________________________________
max_pooling1d (MaxPooling1D) (None, 50, 64)            0         
_________________________________________________________________
separable_conv1d_2 (Separabl (None, 50, 128)           8512      
_________________________________________________________________
separable_conv1d_3 (Separabl (None, 50, 128)           16896     
_________________________________________________________________
global_average_pooling1d (Gl (None, 128)               0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense (Dense)                (None, 128)               16512     
_________________________________________________________________
dense_1 (Dense)              (None, 46)                5934      
=================================================================
Total params: 2,030,470
Trainable params: 72,370
Non-trainable params: 1,958,100
_________________________________________________________________

Сложная часть этой проблемы в том, что у меня много классов (46), но относительно небольшой объем данных. Я хочу использовать nce_loss, чтобы узнать сходство между каждым наблюдением. Ниже приведена моя реализация nce:

loss = tf.reduce_mean(
  input_tensor=tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases,
inputs=model.get_layer('dense').output,labels=train_y, num_sampled=num_sampled, num_classes=num_classes))

Я не уверен, как правильно назначить inputs=model.get_layer('dense').output здесь. Я предположил, что входные данные должны быть пакетными выходами от предпоследнего слоя «плотный»? Когда я пытался скомпилировать, я получил сообщение об ошибке:

"OperatorNotAllowedInGraphError: использование tf.Tensor в качестве Python bool недопустимо при выполнении Graph. Используйте нетерпеливое выполнение или украсьте эту функцию @tf. функция "

...