Как сопоставить логиты и метки в tf.keras? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть предварительно обученная модель, которая имеет следующую архитектуру.

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         (None, 200)               0         
_________________________________________________________________
embedding (Embedding)        (None, 200, 300)          402877800 
_________________________________________________________________
spatial_dropout1d (SpatialDr (None, 200, 300)          0         
_________________________________________________________________
bidirectional (Bidirectional (None, 128)               186880    
_________________________________________________________________
dropout (Dropout)            (None, 128)               0         
_________________________________________________________________
batch_normalization_v1 (Batc (None, 128)               512       
_________________________________________________________________
dense (Dense)                (None, 6)                 774       
_________________________________________________________________
reshape (Reshape)            (None, 6)                 0         
=================================================================
Total params: 403,065,966
Trainable params: 187,910
Non-trainable params: 402,878,056
_________________________________________________________________

Слой Reshape гарантирует, что логиты будут такими же, как у меток

У меня естьодиночные входные данные, которые являются Tensor объектом тензорного потока с формой s (200,), и метками, которые также являются объектом тензорного потока 'Тензор' с формой (6,).

Моя цель здесь состоит в том, чтобы оценить одну выборку, используя метод evaluate, предоставленный керами тензор-потока.Чтобы было проще, я конвертировал Tensor объекты в numpy.Поскольку модель принимает входную форму [None, 200], мне необходимо изменить входные данные перед их передачей в модель.Таким образом, модель будет иметь логит формы (1,6), который затем будет преобразован в (6,) слоем Reshape.

# Clone model is the keras model
# sample_data.x is the input
# sample_data.y is the label

clone_model.evaluate([sample_data.x.numpy().reshape(1,200)], [sample_data.y.numpy()])

Но, в конце концов, яполучил следующую ошибку

InvalidArgumentError: logits and labels must have the same first dimension, got logits shape [1,6] and labels shape [6]
     [[{{node loss_4/dense_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:StatefulPartitionedCall]

Чтобы преодолеть это, я удалил слой Reshape и изменил метки до (1,6) (sample_data.y.numpy().reshape(1,6)).Но это не помогло, и я закончил с той же ошибкой.

Мне было интересно, может ли кто-нибудь указать, что мне здесь не хватает?Заранее спасибо.

...