在python中同时产生两个变量时出错

2024-06-16 13:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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)

我想返回两个方向盘和图像以及不能使用返回,因为它将打破循环


Tags: 函数imagedatasizeindexdirnpbatch
2条回答

这是因为当您使用yield关键字时,它会使函数返回生成器对象而不是元组。为了从生成器中获得images, steer的所有不同排列,您需要这样做。。。你知道吗

for images, steer in batch_generator(data_dir, X_train, y_train, 5, True):
    # do something...

当您调用一个生成器时,您创建了一个生成器对象,它是一个iterable实例。如果只需要从中提取一个yield值,那么可以使用next

images, steer = next(batch_generator(data_dir, X_train, y_train, 5, True))

相关问题 更多 >