我在Python中编写一个函数,用于生成一批图像并将它们以两个变量的形式yield回主函数,但这会产生一个错误“预期解包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] # 增强 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) # 将图像和转向角度添加到批次中 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)
我想同时返回steers和images,并且不能使用return,因为这会跳出循环
回答:
这是因为当你使用yield
关键字时,它会让你的函数返回一个生成器对象而不是一个元组。为了从你的生成器中获取images, steer
的所有不同排列,你需要像这样做…
for images, steer in batch_generator(data_dir, X_train, y_train, 5, True): # 做一些事情...