обслуживание классификатора тензорного потока

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

Мой вопрос в том, как я буду вводить данные в модель? Я видел код, используемый в начальном руководстве Google

и попытался реализовать это

classify_inputs_tensor_info = utils.build_tensor_info(
          serialized_tf_example)
      classes_output_tensor_info = utils.build_tensor_info(classes)
      scores_output_tensor_info = utils.build_tensor_info(values)

      classification_signature = signature_def_utils.build_signature_def(
          inputs={
              signature_constants.CLASSIFY_INPUTS: classify_inputs_tensor_info
          },
          outputs={
              signature_constants.CLASSIFY_OUTPUT_CLASSES:
                  classes_output_tensor_info,
              signature_constants.CLASSIFY_OUTPUT_SCORES:
                  scores_output_tensor_info
          },
          method_name=signature_constants.CLASSIFY_METHOD_NAME)

и из того, что я понимаю, ввод передается тензору с именем serialized_tf_example, который, как следует из названия, сериализует ввод в строку, но затем они используют tf.FixedLenFeature, который я не понимаю, а затем анализирует serialized_tf_example с помощью tf.parse_example и присваивает его x, который используется в модели, но я хотел бы проанализировать его классификатору, который принимает массивы в качестве входных данных, но не знаю, как это обойти.

пытаясь реализовать это, я написал это

serialized_tf_example = tf.placeholder(tf.string, name='tf_example')
        feature_configs = { 'audio/encoded': tf.FixedLenFeature( shape=[193], dtype=tf.float32, default_value=input_x),}
        tf_example = tf.parse_example(serialized_tf_example, feature_configs)
        x = tf_example['audio/encoded']

        sess = tf.InteractiveSession()
        sess.run(tf.global_variables_initializer())

        # Define the dimensions in the feature columns
        feature_columns = [tf.contrib.layers.real_valued_column("", dimension=5)]

        classifier = tf.contrib.learn.DNNLinearCombinedClassifier(
            dnn_feature_columns=feature_columns, dnn_hidden_units=[200,300], n_classes=10,
            dnn_optimizer=tf.train.GradientDescentOptimizer(
                learning_rate=0.01
            )
        )

        #run training
        classifier.fit(input_fn=get_train_inputs, steps=100)
        #testing 
        accuracy_score = classifier.evaluate(input_fn=get_test_inputs, steps=10)["accuracy"]
        print('Test accuracy : ', format(accuracy_score))

        prediction = format(list(classifier.predict_classes(x, as_iterable=True)))

но x - тензор, поэтому его нельзя прочитать. когда я пытаюсь использовать run или .eval (), он просит меня передать значение в serialized_tf_example

InvalidArgumentError (см. Выше для трассировки): вы должны передать значение тензора заполнителя 'tf_example' строкой dtype [[Node: tf_example = Placeholderdtype = DT_STRING, shape = [], _device = "/ job: localhost / replica: 0 / task : 0 / cpu: 0 "]]

когда я использую prediction = format (list (classifier.predict_classes (np.array (x), as_iterable = True)) я получаю

InvalidArgumentError (трассировку см. Выше): форма в спецификации shape_and_slice [1,200] не соответствует форме, хранящейся в контрольной точке: [193,200] [[Node: save / RestoreV2_1 = RestoreV2 [dtypes = [DT_FLOAT], _device = "/ job: localhost / replica: 0 / task: 0 / cpu: 0 "] (_ recv_save / Const_0, save / RestoreV2_1 / tensor_names, save / RestoreV2_1 / shape_and_slices)]]


person Brian Phiri    schedule 01.05.2017    source источник


Ответы (1)


Вы можете / должны использовать classifier.predict без tf.Example. Ваш input_fn в train, а eval возвращает x, y. вы можете написать pred_input_fn аналогично другим функциям ввода.

predictoin = next(classifier.predict_classes(input_fn=predict_input_fn))

Обратите внимание: если вы получаете все прогнозы с list, функция должна завершиться исключением. Вы можете проверить tf.estimator.inputs.numpy_input_fn

person user1454804    schedule 01.05.2017
comment
привет @ user1454804 Я пытался реализовать функцию ввода, но получаю TypeError: x must be dict; got Tensor - person Brian Phiri; 05.05.2017