У меня есть предварительно обученная модель, которая имеет следующую архитектуру.
_________________________________________________________________
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)
).Но это не помогло, и я закончил с той же ошибкой.
Мне было интересно, может ли кто-нибудь указать, что мне здесь не хватает?Заранее спасибо.