2017-01-17 32 views
10

Tôi đã tạo mô hình dựa trên ví dụ 'rộng và sâu' (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/wide_n_deep_tutorial.py).Cách tạo ứng dụng phân phối lưu lượng cho mô hình 'rộng và sâu'?

tôi đã xuất khẩu các mô hình như sau:

m = build_estimator(model_dir) 
    m.fit(input_fn=lambda: input_fn(df_train, True), steps=FLAGS.train_steps) 
    results = m.evaluate(input_fn=lambda: input_fn(df_test, True), steps=1) 

    print('Model statistics:') 

    for key in sorted(results): 
    print("%s: %s" % (key, results[key])) 

    print('Done training!!!') 

    # Export model 
    export_path = sys.argv[-1] 
    print('Exporting trained model to %s' % export_path) 

    m.export(
    export_path, 
    input_fn=serving_input_fn, 
    use_deprecated_input_fn=False, 
    input_feature_key=INPUT_FEATURE_KEY 

Câu hỏi của tôi là, làm thế nào để tạo ra một khách hàng để đưa ra dự đoán từ mô hình xuất khẩu này? Ngoài ra, tôi đã xuất mô hình chính xác chưa?

Cuối cùng, tôi cũng cần có khả năng thực hiện điều này trong Java. Tôi nghi ngờ tôi có thể làm điều này bằng cách tạo các lớp Java từ các tệp proto bằng cách sử dụng gRPC.

Tài liệu rất sơ sài, do đó tại sao tôi yêu cầu ở đây.

Rất cám ơn!

+0

Bạn đã xem [hướng dẫn này] chưa (https://tensorflow.github.io/serving/serving_basic.html)? Trường hợp đã làm nó đi sai? –

+0

Vâng, tôi đã nhìn vào lời cảm ơn này. Điều này là tuyệt vời nếu bạn đang sử dụng lưu lượng thuần túy, nhưng tôi đang sử dụng tf.contrib.learn api. Tôi không chắc chắn làm thế nào để xuất khẩu và tạo ra một khách hàng bằng cách sử dụng api này. –

Trả lời

1

Tôi đã viết một hướng dẫn đơn giản Exporting and Serving a TensorFlow Wide & Deep Model.

TL; DR

Để xuất một ước có bốn bước sau:

  1. Xác định các tính năng cho xuất khẩu như một danh sách của tất cả các tính năng sử dụng trong ước lượng khởi tạo.

  2. Tạo cấu hình tính năng bằng cách sử dụng create_feature_spec_for_parsing.

  3. Tạo serving_input_fn phù hợp để sử dụng trong phân phối sử dụng input_fn_utils.build_parsing_serving_input_fn.

  4. Xuất mô hình bằng cách sử dụng export_savedmodel().

Để chạy một kịch bản client đúng cách bạn cần làm ba bước sau đây:

  1. Tạo và đặt kịch bản của bạn ở đâu đó trong thư mục/phân phối/thư mục, ví dụ/serve/tensorflow_serving/example/

  2. Tạo hoặc sửa đổi tệp BUILD tương ứng bằng cách thêm py_binary.

  3. Xây dựng và chạy máy chủ mô hình, ví dụ: tensorflow_model_server.

  4. Tạo, tạo và chạy ứng dụng khách gửi tf.Ví dụ đến số tensorflow_model_server của chúng tôi để biết suy luận.

Để biết thêm chi tiết, hãy xem hướng dẫn.

1

Chỉ cần dành một tuần vững chắc để tìm hiểu điều này. Trước hết, m.export sẽ ngừng sử dụng sau một vài tuần, do đó thay vì chặn đó, hãy sử dụng: m.export_savedmodel(export_path, input_fn=serving_input_fn).

Điều đó có nghĩa là sau đó bạn phải xác định serving_input_fn(), tất nhiên phải có chữ ký khác với số input_fn() được xác định trong hướng dẫn rộng và sâu. Cụ thể là, hãy tiến lên phía trước, tôi đoán rằng chúng tôi khuyên rằng input_fn() những thứ phải trả lại đối tượng InputFnOps, được xác định here.

Đây là cách tôi đã tìm ra cách để làm cho rằng công việc:

from tensorflow.contrib.learn.python.learn.utils import input_fn_utils 
from tensorflow.python.ops import array_ops 
from tensorflow.python.framework import dtypes 

def serving_input_fn(): 
    features, labels = input_fn() 
    features["examples"] = tf.placeholder(tf.string) 

    serialized_tf_example = array_ops.placeholder(dtype=dtypes.string, 
               shape=[None], 
               name='input_example_tensor') 
    inputs = {'examples': serialized_tf_example} 
    labels = None # these are not known in serving! 
    return input_fn_utils.InputFnOps(features, labels, inputs) 

Đây có lẽ không phải là 100% thành ngữ, nhưng tôi khá chắc chắn rằng nó hoạt động. Bây giờ.

Các vấn đề liên quan