【发布时间】: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