Home > Blockchain >  the evaluation section leds to bug
the evaluation section leds to bug

Time:01-03

there is a problem in running code

pop out an error and can not generate the result, Error: ValueError: Input 2 is incompatible with layer model_2: expected shape=(None, 50), found shape=(None, 51)

so is there any solution for? Much obliged

the full part that triggers the bug droped below full error:

ValueError: in user code:

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:1478 predict_function * return step_function(self, iterator) /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:1468 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) /opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/tpu_strategy.py:540 run return self.extended.tpu_run(fn, args, kwargs, options) /opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/tpu_strategy.py:1296 tpu_run return func(args, kwargs) /opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/tpu_strategy.py:1364 tpu_function xla_options=tpu.XLAOptions(use_spmd_for_xla_partitioning=False)) /opt/conda/lib/python3.7/site-packages/tensorflow/python/tpu/tpu.py:968 replicate xla_options=xla_options)[1] /opt/conda/lib/python3.7/site-packages/tensorflow/python/tpu/tpu.py:1439 split_compile_and_replicate outputs = computation(*computation_inputs) /opt/conda/lib/python3.7/site-packages/tensorflow/python/distribute/tpu_strategy.py:1325 replicated_fn result[0] = fn(*replica_args, **replica_kwargs) /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:1461 run_step ** outputs = model.predict_step(data) /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py:1434 predict_step return self(x, training=False) /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/base_layer.py:998 call input_spec.assert_input_compatibility(self.input_spec, inputs, self.name) /opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/input_spec.py:274 assert_input_compatibility ', found shape=' display_shape(x.shape))

ValueError: Input 2 is incompatible with layer model_2: expected shape=(None, 50), found shape=(None, 51)



CodePudding user response:

It looks like during training it's is dropping last elements of train_data['decoder_inputs_ids'] and train_data['decoder_attention_mask'] while during prediction, it's not.

model.fit(x=[train_data['input_ids'],
             train_data['attention_mask'],
             train_data['decoder_inputs_ids'][:,:-1],
             train_data['decoder_attention_mask'][:,:-1]],

pred = model.predict([input_ids, attention_mask, decoder_inputs_ids, decoder_attention_mask])

That's why during inference it has dimension (None, 51) instead of found shape=(None, 50).

You can pad decoder_inputs_ids and decoder_attention_mask to max_len_sum-1 (instead of max_len_sum) during prediction:

#Pad sequence to max_len_sum-1 (instead of original max_len_sum).   
decoder_inputs_ids = tf.keras.preprocessing.sequence.pad_sequences([decoder_input_ids[:-1]], maxlen=
                                                max_len_sum-1, padding= 'post', truncating='post')
decoder_attention_mask = tf.keras.preprocessing.sequence.pad_sequences([decoder_attention_mask[:-1]], maxlen=
                                                max_len_sum-1, padding= 'post', truncating='post')

  • Related