ошибка, приводящая к двум переменным одновременно в python - PullRequest
0 голосов
/ 19 июня 2019

Я делаю функцию в 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 ]

1 голос
/ 19 июня 2019

Это потому, что когда вы используете ключевое слово yield, ваша функция возвращает объект генератора вместо кортежа. Чтобы получить все различные перестановки images, steer от вашего генератора, вам нужно сделать что-то вроде этого ...

for images, steer in batch_generator(data_dir, X_train, y_train, 5, True):
    # do something...
0 голосов
/ 19 июня 2019

Когда вы вызываете генератор, вы создаете один объект генератора, который является повторяемым экземпляром.Если вам нужно извлечь из него только одну yield ценность, тогда вы можете использовать next

images, steer = next(batch_generator(data_dir, X_train, y_train, 5, True))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...