Получение ошибки объект 'str' не имеет атрибута 'dtype' при экспорте модели textum для обслуживания TensorFlow

В настоящее время я пытаюсь экспортировать модель TFtextum с помощью PREDICT SIGNATURE. У меня _Decode возвращает результат из строки, переданной в тестовой статье, а затем я передаю его buildTensorInfo. Фактически, это возвращаемая строка.

Теперь, когда я запускаю логикуtextum_export.py для экспорта модели, она доходит до точки, в которой создается объект TensorInfo, но с ошибками в следующей трассировке. Я знаю, что подпись PREDICT обычно используется с изображениями. Это проблема? Могу ли я не использовать это для модели Textsum, потому что я работаю со строками?

Ошибка:

Traceback (most recent call last):
  File "export_textsum.py", line 129, in Export
    tensor_info_outputs = tf.saved_model.utils.build_tensor_info(res)
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/saved_model/utils_impl.py", line 37, in build_tensor_info
    dtype_enum = dtypes.as_dtype(tensor.dtype).as_datatype_enum
AttributeError: 'str' object has no attribute 'dtype'

Сессия TF, в которую экспортируется модель, приведена ниже:

with tf.Session(config = config) as sess:

                # Restore variables from training checkpoints.
                ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir)
                if ckpt and ckpt.model_checkpoint_path:
                    saver.restore(sess, ckpt.model_checkpoint_path)
                    global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
                    print('Successfully loaded model from %s at step=%s.' %
                        (ckpt.model_checkpoint_path, global_step))
                    res = decoder._Decode(saver, sess)

                    print("Decoder value {}".format(type(res)))
                else:
                    print('No checkpoint file found at %s' % FLAGS.checkpoint_dir)
                    return

                # Export model
                export_path = os.path.join(FLAGS.export_dir,str(FLAGS.export_version))
                print('Exporting trained model to %s' % export_path)


                #-------------------------------------------

                tensor_info_inputs = tf.saved_model.utils.build_tensor_info(serialized_tf_example)
                tensor_info_outputs = tf.saved_model.utils.build_tensor_info(res)

                prediction_signature = (
                    tf.saved_model.signature_def_utils.build_signature_def(
                        inputs={ tf.saved_model.signature_constants.PREDICT_INPUTS: tensor_info_inputs},
                        outputs={tf.saved_model.signature_constants.PREDICT_OUTPUTS:tensor_info_outputs},
                        method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
                        ))

                #----------------------------------

                legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
                builder = saved_model_builder.SavedModelBuilder(export_path)

                builder.add_meta_graph_and_variables(
                    sess=sess, 
                    tags=[tf.saved_model.tag_constants.SERVING],
                    signature_def_map={
                        'predict':prediction_signature,
                    },
                    legacy_init_op=legacy_init_op)
                builder.save()

                print('Successfully exported model to %s' % export_path)

person xtr33me    schedule 21.10.2017    source источник
comment
Сигнатура PREDICT работает с тензорами, res_tensor = tf.convert_to_tensor (res)   -  person Gaurav Pawar    schedule 21.10.2017
comment
Гаурав ты классный! Это сработало отлично. Кажется, я не могу назвать этот комментарий ответом, но вы должны быть тем, кто заслуживает уважения. Если вы можете предоставить свой комментарий выше в качестве ответа, я приму его. Спасибо еще раз!   -  person xtr33me    schedule 22.10.2017


Ответы (1)


Сигнатура PREDICT работает с тензорами, если res - это переменная python типа str, тогда res_tensor будет dtype tf.string

res_tensor = tf.convert_to_tensor(res) 
person Gaurav Pawar    schedule 22.10.2017