为什么在创建常量Tensor期间使用“CopyFrom”?

时间:2016-11-17 17:05:30

标签: python tensorflow protocol-buffers

在常量Tensor的创建过程中,有以下line

  tensor_value.tensor.CopyFrom(
      tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape))

CopyFrom创建一个新创建的Tensor原型的副本。然而,根据文档,make_tensor_proto创建一个新对象,这看起来像是浪费资源来应对。它会更充足,只做下一步:

  tensor_value.tensor =
      tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape)

这不应该创建一个新对象,而且它也是OneOf protobuf字段的有效用法。

1 个答案:

答案 0 :(得分:4)

您无法按照此文档中的说明将原型分配给原型字段:https://developers.google.com/protocol-buffers/docs/reference/python-generated

  

您无法为嵌入的消息字段分配值。相反,为子消息中的任何字段分配值意味着在父节点中设置消息字段。

如果删除CopyFrom,您将收到以下错误:

AttributeError: Assignment not allowed to field "tensor" in protocol message object.