在常量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字段的有效用法。
答案 0 :(得分:4)
您无法按照此文档中的说明将原型分配给原型字段:https://developers.google.com/protocol-buffers/docs/reference/python-generated
您无法为嵌入的消息字段分配值。相反,为子消息中的任何字段分配值意味着在父节点中设置消息字段。
如果删除CopyFrom,您将收到以下错误:
AttributeError: Assignment not allowed to field "tensor" in protocol message object.