我正在python中制作一个函数,以生成一批图像并将其返回到两个变量的主函数中,但这会产生此错误“太多的值无法解压缩预期的2” >
尝试使用return代替,但是出现了相同的错误,并且仅返回一个变量时效果很好。
这是生成器函数:
def batch_generator(data_dir, image_paths, steering_angles, batch_size, is_training):
images = np.empty([batch_size, IMAGE_HEIGHT, IMAGE_WIDTH, IMAGE_CHANNELS])
steers = np.empty(batch_size)
while True:
i = 0
for index in np.random.permutation(image_paths.shape[0]):
center, left, right = image_paths[index]
steering_angle = steering_angles[index]
# argumentation
if is_training and np.random.rand() < 0.6:
image, steering_angle = augument(data_dir, center, left, right, steering_angle)
else:
image = load_image(data_dir, center)
# add the image and steering angle to the batch
images[i] = preprocess(image)
steers[i] = steering_angle
i += 1
if i == batch_size:
break
print(images[0])
yield images, steers
这是调用它的行
images, steer = batch_generator(data_dir, X_train, y_train, 5, True)
我也想同时返回转向和图像,并且不能使用return,因为它将退出循环
答案 0 :(得分:1)
这是因为当您使用yield
关键字时,它将使您的函数返回生成器对象而不是元组。为了从生成器中获取images, steer
的所有不同排列,您需要执行以下操作……
for images, steer in batch_generator(data_dir, X_train, y_train, 5, True):
# do something...
答案 1 :(得分:0)
调用生成器时,将创建一个生成器对象,它是一个可迭代的实例。如果您只需要提取其中的一个yield
值,则可以使用next
images, steer = next(batch_generator(data_dir, X_train, y_train, 5, True))