Tensorflow - 操作构造函数的含义是什么?

时间:2016-07-10 15:50:35

标签: python c++ constructor machine-learning tensorflow

在建筑物下面的link图表标题中有一行显示

  

“Python库中的ops构造函数返回代表构造的ops输出的对象。您可以将这些对象传递给其他ops构造函数以用作输入。”

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

1 个答案:

答案 0 :(得分:1)

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

特别是具有实际逻辑的东西,如tf.add,将同时创建tensorflow.python.framework.ops.Operation(执行添加)和tensorflow.python.framework.ops.Tensor(以存储操作的结果),并且只有张量将被退回(这是引用部分文档试图解释的内容)。

例如:

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

将导致

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)

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

更新

一个简单的基于python的示例可能更有用,因此TF会执行以下操作:

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意义上的构造函数(也不是初始化函数)。它更像是工厂设计的范例。