- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让 PyTorch 与 DataLoader 一起工作,据说这是处理小批量的最简单方法,在某些情况下这是获得最佳性能所必需的。
DataLoader 需要一个数据集作为输入。
大多数关于 Dataset 的文档都假定您正在使用现成的标准数据集,例如MNIST,或者至少是图像,并且可以将现有机器用作黑匣子。我正在处理自己生成的非图像数据。我目前最好的尝试是将有关如何执行此操作的文档提炼成最小的测试用例:
import torch
from torch import nn
from torch.utils.data import Dataset, DataLoader
class Dataset1(Dataset):
def __init__(self):
pass
def __len__(self):
return 80
def __getitem__(self, i):
# actual data is blank, just to test the mechanics of Dataset
return [0.0, 0.0, 0.0], 1.0
train_dataloader = DataLoader(Dataset1(), batch_size=8)
for X, y in train_dataloader:
print(f"X: {X}")
print(f"y: {y.shape} {y.dtype} {y}")
break
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.layers = nn.Sequential(
nn.Linear(3, 10),
nn.ReLU(),
nn.Linear(10, 1),
nn.Sigmoid(),
)
def forward(self, x):
return self.layers(x)
device = torch.device("cpu")
model = Net().to(device)
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
for epoch in range(10):
for X, y in train_dataloader:
X, y = X.to(device), y.to(device)
pred = model(X)
loss = criterion(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
上述程序的输出是:
X: [tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float64), tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float64), tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float64)]
y: torch.Size([8]) torch.float64 tensor([1., 1., 1., 1., 1., 1., 1., 1.], dtype=torch.float64)
Traceback (most recent call last):
File "C:\ml\test_dataloader.py", line 47, in <module>
X, y = X.to(device), y.to(device)
AttributeError: 'list' object has no attribute 'to'
在我能找到的所有示例代码中,X, y = X.to(device), y.to(device)
成功了,因为X
确实是一个张量(而它不在我的版本中)。现在我试图找出究竟是什么将 X
转换为张量,因为示例代码例如https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html不这样做,或者我不明白它是如何以及在哪里做的。
Dataset 本身是否将事物转换为张量?答案似乎是“有点”。
它已将 y
转换为张量,即批处理中每个示例的 y
值的列。这么多,是有道理的,尽管它使用了 float64 类型,而在机器学习中,我们通常更喜欢 float32。我习惯于 Python 总是以 double 表示标量,因此从 double 到单精度的转换发生在形成张量时,并且可以通过指定 dtype
参数来确保这一点.但在这种情况下,Dataset 似乎已经隐含地形成了张量。有没有地方或方法可以指定 dtype
参数?
X
不是张量,而是张量列表。如果它是批处理中示例的列表,这将具有直观意义,但不是 8 个元素的列表,每个元素包含 3 个元素,而是相反。因此 Dataset 转置了输入数据,如果它正在形成一个张量以匹配 y
的形状,这将是有意义的,但它不是制作单个 2d 张量,而是制作一个 1d 张量列表。 (而且,还是 double 。)为什么?有没有办法改变这种行为?
到目前为止发布到 Does pytorch Dataset.__getitem__ have to return a dict? 的答案说 __getitem__
可以返回任何东西。好的,但是如何将所有内容转换为训练过程所需的形式?
最佳答案
数据集实例仅负责返回数据集的单个元素,它可以采用多种形式:dict、list、int、 float 、张量等...
但是您看到的行为实际上是由 PyTorch 数据加载器处理的,而不是由底层数据集处理的。这个机制称为 collating,其实现由 collate_fn
完成。您实际上可以提供自己的参数作为 data.DataLoader
的参数. PyTorch 提供的默认整理功能为 default_collate
并将处理绝大多数情况。请看its documentation ,因为它提供了有关它可以处理的可能用例的见解。
使用此默认整理,返回的批处理将采用与您在数据集中返回的项目相同的类型。因此,您应该返回张量而不是列表作为 @dx2-66解释。
关于pytorch - PyTorch 数据集应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72867109/
我正在尝试在Elasticsearch中返回的值中考虑地理位置的接近性。我希望近距离比某些字段(例如legal_name)重要,但比其他字段重要。 从文档看来,当前的方法是使用distance_fea
我是Elasticsearch的初学者,今天在进行“多与或”查询时遇到问题。 我有一个SQL查询,需要在Elastic中进行转换: WHERE host_id = 999 AND psh_pid =
智能指针应该/可以在函数中通过引用传递吗? 即: void foo(const std::weak_ptr& x) 最佳答案 当然你可以通过const&传递一个智能指针。 这样做也是有原因的: 如果接
我想执行与以下MYSQL查询等效的查询 SELECT http_user, http_req_method, dst dst_port count(*) as total FROM my_table
我用这两个查询进行测试 用must查询 { "size": 200, "from": 0, "query": { "bool": { "must": [ { "mat
我仍在研究 Pro Android 2 的简短服务示例(第 304 页)同样,服务示例由两个类组成:如下所示的 BackgroundService.java 和如下所示的 MainActivity.j
给定标记 like this : header really_wide_table..........................................
根据 shouldJS 上的文档网站我应该能够做到这一点: ''.should.be.empty(); ChaiJS网站没有使用 should 语法的示例,但它列出了 expect 并且上面的示例似乎
我在 Stack Overflow 上读到一些 C 函数是“过时的”或“应该避免”。你能给我一些这种功能的例子以及原因吗? 这些功能有哪些替代方案? 我们可以安全地使用它们 - 有什么好的做法吗? 最
在 C++11 中,可变参数模板允许使用任意数量的参数和省略号运算符 ... 调用函数。允许该可变参数函数对每个参数做一些事情,即使每个参数的事情不是一样的: template void dummy(
我在我从事的项目之一上将Shoulda与Test::Unit结合使用。我遇到的问题是我最近更改了此设置: class MyModel :update end 以前,我的(通过)测试看起来像这样: c
我该如何做 or使用 chai.should 进行测试? 例如就像是 total.should.equal(4).or.equal(5) 或者 total.should.equal.any(4,5)
如果您要将存储库 B 中的更改 merge 到存储库 A 中,是否应该 merge .hgtags 中的更改? 存储库 B 可能具有 A 中没有的标签 1.01、1.02、1.03。为什么要将这些 m
我正在尝试执行X AND(y OR z)的查询 我需要获得该代理为上市代理或卖方的所有已售属性(property)。 我只用 bool(boolean) 值就可以得到9324个结果。当我添加 bool
我要离开 this教程,尝试使用 Mocha、Supertest 和 Should.js 进行测试。 我有以下基本测试来通过 PUT 创建用户接受 header 中数据的端点。 describe('U
我正在尝试为 Web 应用程序编写一些 UI 测试,但有一些复杂的问题希望您能帮助我解决。 首先,该应用程序有两种模式。其中一种模式是“训练”,另一种是“现场”。在实时模式下,数据直接从我们的数据库中
我有一个规范: require 'spec_helper' # hmm... I need to include it here because if I include it inside desc
我正在尝试用这个测试我在 Rails 中的更新操作: context "on PUT to :update" do setup do @countdown = Factory(:count
我还没有找到合适的答案: onclick="..." 中是否应该转义 &(& 符号)? (或者就此而言,在每个 HTML 属性中?) 我已经尝试在 jsFiddle 和 W3C 的验证器上运行转义和非
import java.applet.*; import java.awt.*; import java.awt.event.*; public class Main extends Applet i
我是一名优秀的程序员,十分优秀!