টেনসরফ্লো-তে, সমস্ত গ্রাহকের নাম একটি গ্রাফে পান


118

আমি Tensorflowএবং সাথে নিউরাল নেট তৈরি করছি skflow; কিছু কারণে আমি একটি প্রদত্ত ইনপুট জন্য কিছু ভেতরের tensors মান পেতে চান, তাই আমি ব্যবহার করছি myClassifier.get_layer_value(input, "tensorName"), myClassifierএকটি হচ্ছে skflow.estimators.TensorFlowEstimator

তবে, টেনসর নামের সঠিক বাক্য গঠন খুঁজে পাওয়া আমার পক্ষে খুব কঠিন (এমনকি আমি অপারেশন এবং টেনারগুলির মধ্যে বিভ্রান্ত হয়ে যাচ্ছি), সুতরাং আমি গ্রাফটি প্লট করতে এবং নামটি সন্ধান করতে টেনসরবোর্ড ব্যবহার করছি।

টেনসরবোর্ড ব্যবহার না করে কোনও গ্রাফের সমস্ত টেনার গণনার উপায় আছে কি?

উত্তর:


189

আপনি করতে পারেন

[n.name for n in tf.get_default_graph().as_graph_def().node]

এছাড়াও, আপনি যদি আইপিথন নোটবুকটিতে প্রোটোটাইপ করছেন, আপনি সরাসরি নোটবুকে গ্রাফটি প্রদর্শন করতে পারেন, show_graphআলেকজান্ডারের ডিপ ড্রিম নোটবুকের কার্যকারিতা দেখুন


2
আপনি if "Variable" in n.opএটি বোঝার শেষে যুক্ত করে যেমন ভেরিয়েবলের জন্য ফিল্টার করতে পারেন ।
রাদু

নামটি জানা থাকলে একটি নির্দিষ্ট নোড পাওয়ার কোনও উপায় আছে কি?
রকেট পিংগু

গ্রাফ নোড সম্পর্কে আরও পড়তে: tensorflow.org/extend/tool_developers/#
ইভান তালালাইভ

3
উপরের কমান্ডটি সমস্ত ক্রিয়াকলাপ / নোডের নাম দেয়। সমস্ত টেনেসরের নাম পেতে, করুন: টেনসর_পড়তা_নোড = [নোড.ভ্যালু () গ্রাফ.নোপরেশনগুলিতে নোডের জন্য ()] টেনসর_নাম = [টেনসর-তে টেনসর টেনারের জন্য টেনসর জন্য নাম]
জিববিসিমো

25

Get_operation ব্যবহার করে ইয়ারোস্লাভের উত্তরের চেয়ে কিছুটা দ্রুত করার একটি উপায় রয়েছে । এখানে একটি দ্রুত উদাহরণ:

import tensorflow as tf

a = tf.constant(1.3, name='const_a')
b = tf.Variable(3.1, name='variable_b')
c = tf.add(a, b, name='addition')
d = tf.multiply(c, a, name='multiply')

for op in tf.get_default_graph().get_operations():
    print(str(op.name))

1
আপনি টেনসর ব্যবহার করে পেতে পারেন না tf.get_operations()। কেবল অপারেশন আপনি পেতে পারেন।
সলডাক

14

আমি উত্তরগুলি সংক্ষিপ্ত করার চেষ্টা করব:

সমস্ত নোড পেতে (টাইপ tensorflow.core.framework.node_def_pb2.NodeDef):

all_nodes = [n for n in tf.get_default_graph().as_graph_def().node]

সব পেতে অপস (টাইপ tensorflow.python.framework.ops.Operation):

all_ops = tf.get_default_graph().get_operations()

সমস্ত ভেরিয়েবল পেতে (টাইপ tensorflow.python.ops.resource_variable_ops.ResourceVariable):

all_vars = tf.global_variables()

সমস্ত টেনসর পেতে (টাইপ tensorflow.python.framework.ops.Tensor) :

all_tensors = [tensor for op in tf.get_default_graph().get_operations() for tensor in op.values()]

11

tf.all_variables() আপনি চান তথ্য পেতে পারেন।

এছাড়াও, টেন্সরফ্লো শিখুনে আজ করা এই প্রতিশ্রুতিটিget_variable_names অনুমানকারীতে একটি ফাংশন সরবরাহ করে যা আপনি সহজেই সমস্ত পরিবর্তনশীল নামগুলি পুনরুদ্ধার করতে ব্যবহার করতে পারেন।


এই ফাংশনটি অবচিত করা হয়েছে
ক্যাফেবাব ২

8
... এবং তার উত্তরাধিকারীtf.global_variables()
bluenote10

11
এটি টেনসর নয়, কেবল পরিবর্তনশীল নিয়ে আসে।
রাজর্ষি মিত্র

Tensorflow সালে 1.9.0 অনুষ্ঠানall_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02
stackoverYC

5

আমি মনে করি এটিও করবে:

print(tf.contrib.graph_editor.get_tensors(tf.get_default_graph()))

তবে সালভাদো এবং ইয়ারোস্লাভের উত্তরগুলির সাথে তুলনা করে, আমি জানি না কোনটি ভাল।


এই একটি টেনসরফ্লো অবজেক্ট সনাক্তকরণ API তে ব্যবহৃত হিমায়িত_ইনফারেন্স_গ্রাফ.পিবি ফাইল থেকে আমদানিকৃত গ্রাফ নিয়ে কাজ করেছিল। ধন্যবাদ
সিমো 23

4

গৃহীত উত্তরটি কেবল আপনাকে নামের সাথে স্ট্রিংয়ের একটি তালিকা দেয়। আমি একটি ভিন্ন পদ্ধতির পছন্দ করি, যা আপনাকে (প্রায়) টেনারগুলিতে সরাসরি অ্যাক্সেস দেয়:

graph = tf.get_default_graph()
list_of_tuples = [op.values() for op in graph.get_operations()]

list_of_tuplesএখন প্রতিটি টেন্সর রয়েছে, প্রতিটি একটি টিপলের মধ্যে। টেনারগুলি সরাসরি পেতে আপনি এটি খাপ খাইয়ে নিতে পারেন:

graph = tf.get_default_graph()
list_of_tuples = [op.values()[0] for op in graph.get_operations()]

এটি কেবল অপ্স নয়, অপ্সের আসল আউটপুট টেনজারগুলি আনার উপায়।
Szabolcs

4

যেহেতু ওপি অপারেশন / নোডের তালিকার পরিবর্তে টেনারগুলির তালিকা চেয়েছিল, কোডটি কিছুটা আলাদা হওয়া উচিত:

graph = tf.get_default_graph()    
tensors_per_node = [node.values() for node in graph.get_operations()]
tensor_names = [tensor.name for tensors in tensors_per_node for tensor in tensors]

3

পূর্ববর্তী উত্তরগুলি ভাল, আমি গ্রাফ থেকে টেনসারগুলি নির্বাচন করতে লিখেছি এমন একটি ইউটিলিটি ফাংশনটি ভাগ করতে চাই:

def get_graph_op(graph, and_conds=None, op='and', or_conds=None):
    """Selects nodes' names in the graph if:
    - The name contains all items in and_conds
    - OR/AND depending on op
    - The name contains any item in or_conds

    Condition starting with a "!" are negated.
    Returns all ops if no optional arguments is given.

    Args:
        graph (tf.Graph): The graph containing sought tensors
        and_conds (list(str)), optional): Defaults to None.
            "and" conditions
        op (str, optional): Defaults to 'and'. 
            How to link the and_conds and or_conds:
            with an 'and' or an 'or'
        or_conds (list(str), optional): Defaults to None.
            "or conditions"

    Returns:
        list(str): list of relevant tensor names
    """
    assert op in {'and', 'or'}

    if and_conds is None:
        and_conds = ['']
    if or_conds is None:
        or_conds = ['']

    node_names = [n.name for n in graph.as_graph_def().node]

    ands = {
        n for n in node_names
        if all(
            cond in n if '!' not in cond
            else cond[1:] not in n
            for cond in and_conds
        )}

    ors = {
        n for n in node_names
        if any(
            cond in n if '!' not in cond
            else cond[1:] not in n
            for cond in or_conds
        )}

    if op == 'and':
        return [
            n for n in node_names
            if n in ands.intersection(ors)
        ]
    elif op == 'or':
        return [
            n for n in node_names
            if n in ands.union(ors)
        ]

সুতরাং আপনার যদি অপ্স সহ কোনও গ্রাফ থাকে:

['model/classifier/dense/kernel',
'model/classifier/dense/kernel/Assign',
'model/classifier/dense/kernel/read',
'model/classifier/dense/bias',
'model/classifier/dense/bias/Assign',
'model/classifier/dense/bias/read',
'model/classifier/dense/MatMul',
'model/classifier/dense/BiasAdd',
'model/classifier/ArgMax/dimension',
'model/classifier/ArgMax']

তারপরে চলছে

get_graph_op(tf.get_default_graph(), ['dense', '!kernel'], 'or', ['Assign'])

আয়:

['model/classifier/dense/kernel/Assign',
'model/classifier/dense/bias',
'model/classifier/dense/bias/Assign',
'model/classifier/dense/bias/read',
'model/classifier/dense/MatMul',
'model/classifier/dense/BiasAdd']

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.