gpt4 book ai didi

python - Pytorch 中的缓冲区是什么?

转载 作者:行者123 更新时间:2023-12-01 14:34:01 24 4
gpt4 key购买 nike

我明白了register_bufferregister_buffer and register_parameters 之间的区别.

但是 PyTorch 中缓冲区的精确定义是什么?

最佳答案

这可以通过查看 implementation 来回答。 :

def register_buffer(self, name, tensor):
if '_buffers' not in self.__dict__:
raise AttributeError(
"cannot assign buffer before Module.__init__() call")
elif not isinstance(name, torch._six.string_classes):
raise TypeError("buffer name should be a string. "
"Got {}".format(torch.typename(name)))
elif '.' in name:
raise KeyError("buffer name can't contain \".\"")
elif name == '':
raise KeyError("buffer name can't be empty string \"\"")
elif hasattr(self, name) and name not in self._buffers:
raise KeyError("attribute '{}' already exists".format(name))
elif tensor is not None and not isinstance(tensor, torch.Tensor):
raise TypeError("cannot assign '{}' object to buffer '{}' "
"(torch Tensor or None required)"
.format(torch.typename(tensor), name))
else:
self._buffers[name] = tensor

也就是说,缓冲区的名称:
  • 必须是字符串:not isinstance(name, torch._six.string_classes)
  • 不能包含 . (点):'.' in name
  • 不能为空字符串:name == ''
  • 不能是模块的属性:hasattr(self, name)
  • 应该是唯一的:name not in self._buffers

  • tensor (你猜怎么了?):
  • 应该是张量:isinstance(tensor, torch.Tensor)

  • 因此,缓冲区只是具有这些属性的张量,在 _buffers 中注册。 Module 的属性;

    关于python - Pytorch 中的缓冲区是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59620431/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com