小编Flo*_*sch的帖子

使用 Pytorch 数据加载器加载特定样本的简单方法

我目前正在训练一个 3D CNN,用于具有相对稀疏标签的二元分类(标签数据中约 1% 的体素对应于目标类)。

为了在训练期间执行基本的健全性检查(例如,网络是否完全学习?),向网络展示一个小的、精心挑选的训练示例子集,其目标类别标签的比例高于平均水平。

正如 Pytorch 文档所建议的那样,我实现了自己的dataset类(继承自torch.utils.data.Dataset),它通过它的__get_item__方法向torch.utils.data.DataLoader.

在我发现的pytorch 教程中DataLoader用作迭代器来生成训练循环,如下所示:

for i, data in enumerate(self.dataloader):

    # Get training data
    inputs, labels = data

    # Train the network
    # [...]
Run Code Online (Sandbox Code Playgroud)

我现在想知道的是是否存在一种简单的方法来加载单个或几个特定的​​训练示例(使用Dataset's__get_item__方法理解的线性索引)。但是,DataLoader没有__get_item__方法并反复调用__next__直到达到所需的索引似乎并不优雅。

显然,解决此问题的一种可能方法是定义自定义samplerbatch_sampler从抽象继承torch.utils.data.Sampler。但这似乎超出了检索一些特定样本的要求。

我想我在这里忽略了一些非常简单和明显的东西。任何建议表示赞赏!

python machine-learning deep-learning pytorch

6
推荐指数
1
解决办法
3328
查看次数

向列表中也包含无类型的数字元素添加常量值的优雅方法

我正在尝试在这里实现非常简单的功能,以一种优雅的方式可以实现,但我不知道如何:

假设我有一个列表my_list = [1, None, 3, 4],想要val = 3向每个数字元素添加一个常量以获得my_list + val = [4, None, 6, 7]

可以使用带有None值条件的有点笨重的循环来完成此操作:

my_list = [1, None, 3, 4]
val = 3
for idx, el in enumerate(my_list):
    if el is not None:
        my_list[idx] += val

print(my_list)
>>> [4, None, 6, 7]
Run Code Online (Sandbox Code Playgroud)

但是,我强烈认为必须有一种更优雅的方法。我尝试了以下方法:

my_list = list(map(lambda x: x+val, filter(None, my_list)))

print(my_list)
>>> [4, 6, 7]
Run Code Online (Sandbox Code Playgroud)

但是后来这些None元素消失了,我需要保留它们。

任何想法表示赞赏!

python

1
推荐指数
1
解决办法
38
查看次数

标签 统计

python ×2

deep-learning ×1

machine-learning ×1

pytorch ×1