错误在Python中一次产生两个变量

时间:2019-06-19 18:33:28

标签: python machine-learning deep-learning

我正在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,因为它将退出循环

2 个答案:

答案 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))