টেনসরফ্লো সেভডমডেলে সমস্ত ব্যবহৃত অপারেশন তালিকাভুক্ত করবেন কীভাবে?


10

যদি আমি tensorflow.saved_model.saveসেভডমোডেল ফর্ম্যাটে ফাংশনটি ব্যবহার করে আমার মডেলটি সংরক্ষণ করি , তবে এই মডেলটিতে কোন টেনসরফ্লো অপস ব্যবহৃত হবে তা আমি কীভাবে পুনরুদ্ধার করতে পারি। মডেলটি পুনরুদ্ধার করা যায়, এই ক্রিয়াকলাপগুলি গ্রাফে সংরক্ষণ করা হয়, আমার অনুমান saved_model.pbফাইলটিতে is যদি আমি এই প্রোটোফুফটি লোড করি (তবে পুরো মডেল নয়) প্রোটোবুফের লাইব্রেরির অংশগুলি এগুলি তালিকাভুক্ত করে তবে এটি এখনই পরীক্ষামূলক বৈশিষ্ট্য হিসাবে নথিভুক্ত এবং ট্যাগ করা হয়নি। টেনসরফ্লো 1.x এ তৈরি করা মডেলগুলির এই অংশটি থাকবে না।

তাহলে সেভডমোডেল ফর্ম্যাটের কোনও মডেল থেকে ব্যবহৃত অপারেশনগুলির (যেমন MatchingFilesবা WriteFile) তালিকা পুনরুদ্ধারের দ্রুত এবং নির্ভরযোগ্য উপায় কী?

এখনই আমি পুরো জিনিসটি স্থির করতে পারি, যেমন tensorflowjs-converterকরে like তারা সমর্থিত অপারেশনগুলির জন্যও পরীক্ষা করে। কোনও এলএসটিএম মডেলটিতে থাকলে এটি বর্তমানে কাজ করে না, এখানে দেখুন । ওপসগুলি অবশ্যই সেখানে রয়েছে বলে এটি করার কী আরও ভাল উপায় আছে?

একটি উদাহরণ মডেল:

class FileReader(tf.Module):

@tf.function(input_signature=[tf.TensorSpec(name='filename', shape=[None], dtype=tf.string)])
def read_disk(self, file_name):
    input_scalar = tf.reshape(file_name, [])
    output = tf.io.read_file(input_scalar)
    return tf.stack([output], name='content')

file_reader = FileReader()

tf.saved_model.save(file_reader, 'file_reader')

এই ক্ষেত্রে অন্তত: অন্তর্ভুক্ত থাকা সমস্ত ওপ্স আউটপুট থেকে প্রত্যাশিত


1
এটা ঠিক বলতে কি আপনি চান কঠিন কি হয় saved_model.pb, এটি একটি হল tf.GraphDef, অথবা একটি SavedModelprotobuf বার্তা? আপনি যদি একটি থাকে তাহলে tf.GraphDefবলা gdআপনার সাথে ব্যবহৃত অপস তালিকা পেতে পারেন sorted(set(n.op for n in gd.node))। আপনার যদি বোঝা মডেল থাকে তবে আপনি এটি করতে পারেন sorted(set(op.type for op in tf.get_default_graph().get_operations()))। যদি এটি হয় তবে আপনি এটি থেকে (উদাঃ ) SavedModelপেতে পারেন । tf.GraphDefsaved_model.meta_graphs[0].graph_def
jdehesa

আমি একটি সংরক্ষিত স্যাভডমোডেল থেকে বিকল্পগুলি পুনরুদ্ধার করতে চাই। সুতরাং প্রকৃতপক্ষে, আপনি যে বিকল্পটি বর্ণনা করছেন তা শেষ বিকল্প। saved_modelআপনার শেষ উদাহরণে পরিবর্তনশীল কী ? tf.saved_model.load('/path/to/model')Save_model.pb ফাইলটির প্রোটবুফ বা লোডের ফলাফল ।
সাম্প্রদায়িকতা

উত্তর:


1

যদি saved_model.pbকোনও SavedModelপ্রোটোবুফ বার্তা হয় তবে আপনি সেখান থেকে সরাসরি অপারেশনগুলি পাবেন। ধরা যাক আমরা নীচে একটি মডেল তৈরি করি:

import tensorflow as tf

class FileReader(tf.Module):
    @tf.function(input_signature=[tf.TensorSpec(name='filename', shape=[None], dtype=tf.string)])
    def read_disk(self, file_name):
        input_scalar = tf.reshape(file_name, [])
        output = tf.io.read_file(input_scalar)
        return tf.stack([output], name='content')

file_reader = FileReader()
tf.saved_model.save(file_reader, 'tmp')

আমরা এখন এই মডেলটির দ্বারা ব্যবহৃত অপারেশনগুলি এটির মতো খুঁজে পেতে পারি:

from tensorflow.core.protobuf.saved_model_pb2 import SavedModel

saved_model = SavedModel()
with open('tmp/saved_model.pb', 'rb') as f:
    saved_model.ParseFromString(f.read())
model_op_names = set()
# Iterate over every metagraph in case there is more than one
for meta_graph in saved_model.meta_graphs:
    # Add operations in the graph definition
    model_op_names.update(node.op for node in meta_graph.graph_def.node)
    # Go through the functions in the graph definition
    for func in meta_graph.graph_def.library.function:
        # Add operations in each function
        model_op_names.update(node.op for node in func.node_def)
# Convert to list, sorted if you want
model_op_names = sorted(model_op_names)
print(*model_op_names, sep='\n')
# Const
# Identity
# MergeV2Checkpoints
# NoOp
# Pack
# PartitionedCall
# Placeholder
# ReadFile
# Reshape
# RestoreV2
# SaveV2
# ShardedFilename
# StatefulPartitionedCall
# StringJoin

আমি এই জাতীয় কিছু চেষ্টা করেছি, তবে দুর্ভাগ্যক্রমে এটি যা প্রত্যাশা করে তা তা করে না: বলুন আমার কাছে এমন একটি মডেল রয়েছে যা এটি করে: input_scalar = tf.reshape(file_name, []) output = tf.io.read_file(input_scalar) return tf.stack([output], name='content')তবে এখানে তালিকাভুক্ত রিডফিল অপটি সেখানে রয়েছে, তবে মুদ্রিত নয়।
স্যাম্পার্স

1
@ সাম্পারস আমি আপনার প্রস্তাব মত একটি উদাহরণ দিয়ে উত্তর সম্পাদনা করেছি। আমি ReadFileআউটপুট মধ্যে অপারেশন পেতে । এটি কি সম্ভব যে, আপনার আসল ক্ষেত্রে, সেই অপারেশনটি সংরক্ষিত মডেলের ইনপুট এবং আউটপুটটির মধ্যে নয়? সেক্ষেত্রে আমার ধারণা এটি কেটে যেতে পারে।
jdehesa

প্রকৃতপক্ষে প্রদত্ত মডেলের সাথে এটি কাজ করে। দুর্ভাগ্যক্রমে tf2 এ তৈরি মডিউলের জন্য, এটি হয় না। আমি যদি আমার পূর্ববর্তী মন্তব্যে তালিকৃত কলগুলি সমেত একটি file_nameযুক্তি @tf.functionটীকা সহ 1 টি ফাংশন সহ একটি টিএফ.মডুলি তৈরি করি তবে এটি নীচের তালিকাটি দেয়:Const, NoOp, PartitionedCall, Placeholder, StatefulPartitionedCall

আমার প্রশ্নের সাথে একটি মডেল যুক্ত করেছেন
স্যাম্পার্স করুন

@ সাম্পার্স আমি আমার উত্তর আপডেট করেছি। আমি এর আগে টিএফ 1.x ব্যবহার করছিলাম, আমি টিএফ 2.x গ্রাফ সংজ্ঞা বস্তুর পরিবর্তনের সাথে পরিচিত ছিলাম না, আমি মনে করি উত্তরটি এখন সংরক্ষিত মডেলের সমস্ত কিছুকে কভার করে। আমার মনে হয় আপনি যে পাইথন ফাংশনটি লিখেছেন তার সাথে সম্পর্কিত অপারেশনগুলি saved_model.meta_graphs[0].graph_def.library.function[0](সেই node_defফাংশন অবজেক্টের মধ্যে সংগ্রহ) রয়েছে।
jdehesa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.