关于python:Tensorflow – ops构造函数是什么意思?

Tensorflow - What does ops constructors mean?

在这个链接的建筑图标题下面有一条线

"The ops constructors in the Python library return objects that stand for the output of the constructed ops. You can pass these to other ops constructors to use as inputs."

constructor这个词是什么意思?它是在面向对象编程的上下文中,还是在组装图形的上下文中?


这实际上介于两者之间。"ops constructor"是指创建对象的新实例的函数。例如,tf.constant构造了一个新的op,但实际上返回了对作为此操作结果的张量的引用,即tensorflow.python.framework.ops.Tensor的实例,但它不是oop意义上的构造函数。

尤其是具有实际逻辑的事物,如tf.add将同时创建tensorflow.python.framework.ops.Operationtensorflow.python.framework.ops.Tensor(用于存储操作结果),并且只返回张量(这是文档引用部分试图解释的内容)。

例如:

1
2
3
4
5
6
7
8
import tensorflow as tf

tensor = tf.add(tf.constant(1), tf.constant(2))

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

print tensor

会导致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
name:"Const"
op:"Const"
attr {
  key:"dtype"
  value {
    type: DT_INT32
  }
}
attr {
  key:"value"
  value {
    tensor {
      dtype: DT_INT32
      tensor_shape {
      }
      int_val: 1
    }
  }
}

name:"Const_1"
op:"Const"
attr {
  key:"dtype"
  value {
    type: DT_INT32
  }
}
attr {
  key:"value"
  value {
    tensor {
      dtype: DT_INT32
      tensor_shape {
      }
      int_val: 2
    }
  }
}

name:"Add"
op:"Add"
input:"Const"
input:"Const_1"
attr {
  key:"T"
  value {
    type: DT_INT32
  }
}


Tensor("Add:0", shape=TensorShape([]), dtype=int32)

"在后台"创建了三个操作,而您仍然在张量级别上操作(由tf.add返回)。它的名字(默认创建)表明它是Add操作产生的张量。

更新

一个简单的基于Python的示例可能更有用,因此tf会这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class B:

  def __init__(self):
    print 'Constructor of class B is called'
    pass

class A:

  def __init__(self):
    print 'Constructor of class A is called'
    self.b = B()

def create_something():
  print 'Function is called'
  a = A()
  b = a.b
  print 'Function is ready to return'
  return b

print create_something()

如您所见,create_something不是构造函数,它调用一些类的构造函数并返回一些实例,但在oop意义上,它本身不是构造函数(也不是初始值设定项)。更像是工厂设计的天堂。