【问题标题】:choose unique image ids randomly from a list of image ids - python从图像ID列表中随机选择唯一的图像ID - python
【发布时间】:2018-05-04 18:16:21
【问题描述】:

我正在尝试在 keras 中训练一个神经网络,这需要我批量训练模型。我想使用 3 张图片的批量大小,总共有 20 张图片。

我想从一批包含 20 个图像 ID 的列表中随机选择 3 个唯一图像 ID。这个过程将在整个 epoch 中重复。

import numpy as np
image_list = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
epoch = 10
num = 3 # number of values to choose from

for ep in range(epoch):
    count = 0
    ilist = image_list

    while count <= len(image_list):

        if len(ilist)<num:
            # This condition works when sample size is greater than population size
            image_index = list(np.random.choice(image_list,len(image_list)))
        else:
            image_index = list(np.random.choice(image_list,num,replace = False))

        for c in image_index:
            ilist.remove(c)
        # image_index
        # data loading code
        # feature extraction code
        # model training
        count += len(image_index)

image_list 是 20 个唯一图像 ID 的列表。在每个 epoch,只要 some_condition 为 True,train_id 就会随机选择 3 个唯一 ID。当我在 image_list 中只剩下 2 个唯一值时随机选择 3 个值时,我在 train_id ('Sample size is greater than Population Size') 中收到错误。

我试图为这个错误找到 np.random.choice 的任何替代品,但找不到任何替代品。

【问题讨论】:

  • 你的意思是replace=False而不是return=False吗? (另外,我假设9,,10 应该是9,10——我自己会解决这个问题,但我不确定是否修复其他错误,所以我让你把你的代码变成minimal reproducible example.)
  • 无论如何,您实际上是从某处的image_list 中删除这些值吗?如果是这样,那么是的,当你下降到 2 个元素时,你当然不能选择 3。事实上,想想你在问什么:“我如何从 20 个元素中选择 10*3 个不替换的唯一元素? "唯一的答案是:你不能,因为可供选择的元素并不多。如果那不是你真正想要做的,请解释你想要做什么。并显示导致错误的代码,因为您提供的代码显示了我在第一条评论中提到的两个错误,一旦您修复了这些错误,就没有任何错误。
  • 我在代码中做了一些修改。我知道当只剩下 2 个数字时我不能选择 3 个值。我只是想不出我应该用来规避上述错误的条件。

标签: python numpy random machine-learning


【解决方案1】:

只是给你一个想法。如果您的数据不大,这是有道理的。

import numpy as np
x = np.array([[100],[200],[300],[400]])

np.random.shuffle(x)

for i in range(0,3):
    do_something = x[i]
    print(do_something)

或类似的东西:

import numpy as np
x = np.array([[100],[200],[300],[400]])

for i in range(10):#epoch:
    np.random.shuffle(x)
    do_something = x[:3,:]
    print(do_something)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多