2017-11-21 6 views
-2

이 스레드에서 제안한 회귀 솔루션을 구현하는 데 문제가 있습니다. 수익 ValueError : 파이썬에서 압축 할 값이 너무 많습니다 (예상 2).

Using Keras ImageDataGenerator in a regression model

또 다른 스택 질문

비슷한 문제를 가지고 : Tensorflow ValueError: Too many vaues to unpack (expected 2)하지만 내 경우에 작동 할 수있는 솔루션을 찾을 수 couldnt한다. 나는 아무 결과없이 수확량에 대한 this 설명을 통해 갔다. 이상한 점은 처음 두 개의 루프가 완료되었지만 출력이 동일하면 세 번째 루프에서 충돌한다는 것입니다.

디렉토리의 경우 폴더는 list_of_values에 각각 0.1, 0.3 및 0.5에 해당하는 0, 1 및 2로 레이블이 지정됩니다.

import numpy as np 
from keras.preprocessing.image import ImageDataGenerator  
train_datagen = ImageDataGenerator(
      rescale=1./255, 
      height_shift_range=0.15, 
      shear_range=0.2) 
def regression_flow_from_directory(flow_from_directory_gen, list_of_values): 
    for x, y in flow_from_directory_gen: 
     print (list_of_values[y], list_of_values,y) 
     yield (x, list_of_values[y]) 
batch_size=3 
list_of_values=[0.1,0.3,0.5] 
(x_train,y_train) = regression_flow_from_directory(train_datagen.flow_from_directory(
       'figs/train', # this is the target directory 
       batch_size=batch_size, 
       class_mode='sparse'), 
       np.asarray(list_of_values)) 

출력

Found 9 images belonging to 3 classes. 
[ 0.5 0.3 0.1] [ 0.1 0.3 0.5] [2 1 0] 
[ 0.3 0.1 0.3] [ 0.1 0.3 0.5] [1 0 1] 
[ 0.5 0.5 0.1] [ 0.1 0.3 0.5] [2 2 0] 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-179-3cf97453bd05> in <module>() 
     5   batch_size=batch_size, 
     6   class_mode='sparse'), 
----> 7   np.asarray(list_of_values)) 

ValueError: too many values to unpack (expected 2) 

편집 : 오류는 두 변수 (x_train, y_train)로 기능 regression_flow_from_directory 복귀했다. x_train 만 반환하면 생성기가 올바르게 전달됩니다.

x_train = regression_flow_from_directory(train_datagen.flow_from_directory(
     'figs/train', # this is the target directory 
     batch_size=batch_size, 
     class_mode='sparse'), 
     np.asarray(list_of_values)) 
+1

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. 게시 된 코드를 텍스트 파일에 붙여 넣고 설명한 문제를 재현 할 수 있어야합니다. – Prune

답변

1

오류가 np.asarray과는 아무 상관이 없습니다. regression_flow_from_directory 함수에는 yield 문이 포함되어 있습니다. 따라서 호출 할 때 생성 된 값의 튜플이 아니라 생성기 객체가됩니다. 이것은 하나의 객체로, 두 요소 튜플에 압축을 풀려고합니다. 이것이 오류 메시지의 원인입니다.

+0

넵, 실수가 (x_train, y_train)에 압축을 풀려고했다. 단지 x_train으로 바꾸면 효과가있었습니다. 'x_train = regression_flow_from_directory'(train_datagen.flow_from_directory ( '무화과/기차', #이 BATCH_SIZE = BATCH_SIZE, class_mode =) '드문 드문', np.asarray (LIST_OF_VALUES) 대상 디렉토리입니다) – Peaksandpeaks

0
(x_train,y_train) = regression_flow_from_directory(
    train_datagen.flow_from_directory(
     'figs/train', # this is the target directory 
     batch_size=batch_size, 
     class_mode='sparse'), 
     np.asarray(list_of_values)) 

문제는 것으로 보인다 두 값보다 일상 regression_flow_from_directory 돌아보다가. 과제의 왼쪽에 쌍이 있으므로 오른쪽에 정확히 두 개의 값이 있어야합니다. 구성 요소보다는 실제 반환 값을 인쇄 해보십시오. 예를 들어 :

result = regression_flow_from_directory(...) 
print (result) 
(x,y) = result 

당신은 문제를 볼 수 있습니다 : 당신이 그 인수 regression_flow_from_directory을 통해 으로 반복에 있습니다. 교장의

사소한 예 :

>>> (x, y) = 1, 2 
>>> x 
1 
>>> y 
2 
>>> (x, y) = 1, 2, 3 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 
+0

왜'regression_flow_from_directory'가 정의되지 않은 함수라고 생각합니까? 그것의 정의는 나에게 괜찮아 보인다. –

+0

... 내 검색에서 잘못 입력했기 때문입니다. 한숨 ... retracting ... – Prune