मैं अपने मॉडल को प्रशिक्षित करने और भविष्यवाणी के लिए एमएल इंजन का उपयोग करने में सक्षम हूं लेकिन मेरे परिणामों में कोई पहचान जानकारी शामिल नहीं है। भविष्यवाणी के लिए एक समय में एक पंक्ति सबमिट करते समय यह ठीक काम करता है लेकिन एकाधिक पंक्तियों को सबमिट करते समय मेरे पास भविष्यवाणी को मूल इनपुट डेटा से जोड़ने का कोई तरीका नहीं है। GCP documentation इंस्टेंस कुंजियों का उपयोग करके चर्चा करता है लेकिन मुझे कोई उदाहरण कोड नहीं मिल रहा है जो एक आवृत्ति कुंजी का उपयोग करके ट्रेनों और भविष्यवाणी करता है। जीसीपी जनगणना उदाहरण लेना उदाहरण के लिए मैं ग्राफ़ के माध्यम से एक अद्वितीय आईडी पास करने के लिए इनपुट फ़ंक्शंस को कैसे अपडेट करूं और प्रशिक्षण के दौरान इसे अनदेखा करूँगा फिर भी भविष्यवाणी के साथ अद्वितीय आईडी वापस करूँगा? या वैकल्पिक रूप से यदि कोई भी पहले से ही चाबियों का उपयोग कर एक अलग उदाहरण के बारे में जानता है जो भी मदद करेगा।उदाहरण कुंजी के साथ प्रशिक्षण और भविष्यवाणी
def serving_input_fn():
feature_placeholders = {
column.name: tf.placeholder(column.dtype, [None])
for column in INPUT_COLUMNS
}
features = {
key: tf.expand_dims(tensor, -1)
for key, tensor in feature_placeholders.items()
}
return input_fn_utils.InputFnOps(
features,
None,
feature_placeholders
)
def generate_input_fn(filenames,
num_epochs=None,
shuffle=True,
skip_header_lines=0,
batch_size=40):
def _input_fn():
files = tf.concat([
tf.train.match_filenames_once(filename)
for filename in filenames
], axis=0)
filename_queue = tf.train.string_input_producer(
files, num_epochs=num_epochs, shuffle=shuffle)
reader = tf.TextLineReader(skip_header_lines=skip_header_lines)
_, rows = reader.read_up_to(filename_queue, num_records=batch_size)
row_columns = tf.expand_dims(rows, -1)
columns = tf.decode_csv(row_columns, record_defaults=CSV_COLUMN_DEFAULTS)
features = dict(zip(CSV_COLUMNS, columns))
# Remove unused columns
for col in UNUSED_COLUMNS:
features.pop(col)
if shuffle:
features = tf.train.shuffle_batch(
features,
batch_size,
capacity=batch_size * 10,
min_after_dequeue=batch_size*2 + 1,
num_threads=multiprocessing.cpu_count(),
enqueue_many=True,
allow_smaller_final_batch=True
)
label_tensor = parse_label_column(features.pop(LABEL_COLUMN))
return features, label_tensor
return _input_fn
अद्यतन: मैं यह थोड़ा परिवर्तन करने के लिए सिर्फ भविष्यवाणी dict के बजाय model_fn_ops में उत्पादन विकल्प अद्यतन करने के लिए मैं बस जरूरत this answer below से सुझाव कोड का उपयोग करने में सक्षम था। हालांकि, यह केवल तभी काम करता है जब मेरा सेवारत इनपुट फ़ंक्शन this जैसा जेसन इनपुट के लिए कोड किया गया हो। मेरा सेवारत इनपुट फ़ंक्शन पहले Census Core Sample में CSV सेवारत इनपुट फ़ंक्शन के बाद मॉडलिंग किया गया था।
मुझे लगता है कि मेरी समस्या build_standardized_signature_def फ़ंक्शन से आ रही है और इससे भी अधिक is_classification_problem फ़ंक्शन जो कॉल करता है। Csv सेवारत फ़ंक्शन का उपयोग करते हुए इनपुट dict लंबाई 1 है इसलिए यह तर्क classification_signature_def का उपयोग करके समाप्त होता है जो केवल स्कोर प्रदर्शित करता है (जो वास्तव में probabilities है) जबकि इनपुट dict की लंबाई जेसन सेवा इनपुट फ़ंक्शन के साथ 1 से अधिक है और इसके बजाय predict_signature_def का उपयोग किया जाता है जिसमें सभी आउटपुट शामिल होते हैं।
यह मॉडलसेवर में वर्गीकरण टैग के साथ एक ज्ञात समस्या है (जो सीएमएलई अनुमान के लिए उपयोग करता है)। 1.2 में EstimatorSpec आपको अपनी खुद की निर्यात विधि चुनने देता है, इसलिए उम्मीद है कि आपके लिए चीजों को ठीक करना चाहिए, हालांकि इसे tf.contrib.learn.Estimator के बजाय tf.estimator.Estimator का उपयोग करने के लिए एक पुनर्लेख की आवश्यकता होगी। –