python - Pytorch 中的缓冲区是什么?
解决方案
这可以通过查看实现来回答:
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
a 的属性中Module
;
推荐阅读
- typescript - 自动修复缺少未实现的抽象方法(打字稿)的VS代码默认操作
- api - 如何使用 ESP8266 每 1 秒进行一次 API 调用?
- sql - 显示最昂贵电影的成本在 2 美元以内的查询
- amazon-web-services - API 网关资源的多重身份验证
- javascript - ton>将鼠标悬停在标签上以更改标签内的按钮颜色
- php - 如何正确“打印”出添加数组的操作
- java - 不是一一打印列表中的值
- javascript - fetch 没有返回响应
- iterm2 - iterm2 片段和操作被禁用
- sql - Return only single record if name is test