2017-05-04 1 views
3

최신 TensorFlow (v1.1.0)를 설치했으며 IRIS 데이터 세트에 대한 분류자를 빌드하는 것으로 가정하는 tf.contrib.learn Quickstart 자습서를 실행하려고했습니다. 그러나 시도한 때 :tf.contrib.learn load_csv_with_header가 TensorFlow 1.1에서 작동하지 않습니다.

training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
    filename=IRIS_TRAINING, 
    target_dtype=np.int, 
    features_dtype=np.float32) 

나는 StopIteration 오류가 발생했습니다.

API를 검사했을 때 load_csv_with_header()에 관한 내용을 찾지 못했습니다. 튜토리얼을 업데이트하지 않고 최신 버전으로 변경 했습니까? 이 문제를 어떻게 해결할 수 있습니까?

수정 : 이것이 어떤 차이가 있다면 나는 Python3.6을 사용합니다.

답변

6

이는 파이썬이 파이썬 3. 그 파이썬 3.5 작동 아래 여기 내 코드의 차이입니다 : 아마 무슨 일이 있었는지

if not os.path.exists(IRIS_TRAINING): 
    raw = urllib.request.urlopen(IRIS_TRAINING_URL).read().decode() 
    with open(IRIS_TRAINING, 'w') as f: 
     f.write(raw) 

if not os.path.exists(IRIS_TEST): 
    raw = urllib.request.urlopen(IRIS_TEST_URL).read().decode() 
    with open(IRIS_TEST, 'w') as f: 
     f.write(raw) 

이 코드가 IRIS_TRAINING 후 파일 이름을 만든 것입니다. 그러나 파일이 비어 있습니다. 따라서 StopIteration is raised. 당신이 load_csv_with_header의 구현에 보면 : next 문서화 https://docs.python.org/3.5/library/exceptions.html#StopIteration

참고로 파이썬 2 버전에 비해 내 코드의 변화를 읽을 추가 항목을 인식하지 못하는 경우에

with gfile.Open(filename) as csv_file: 
    data_file = csv.reader(csv_file) 
    header = next(data_file) 

StopIteration가 발생 같이

  1. urllib.request.urlopen 대신 urllib.urlopen
  2. 0 : Tensorflow 튜토리얼에서 123,는 read()
+0

나는 실제로 그것을 @ Alexandre의 대답을보고 작업하게 만들었다. 실제로이 파일은 비어 있었고 수동으로 다운로드하면 작동했습니다. 나는'request'를 직접 사용하려했지만, 결국'decode()'에 대해서는 전혀 몰랐습니다. 따라서 다운로드 문제에 대한 해결책을 제시하므로 답변을 받아 들일 수 있습니다. – TasosGlrs

+0

네, 파이썬 3에서'str'과'byte' 타입의 차이 때문에'decode'가 필요합니다.'read()'는'byte'를 리턴하고'write()'는'str'을 기다리고 있습니다. –

2

StopIteration은 csv 파일이 비어있는 경우에만 발생해야합니다. 해당 경로 (IRIS_TRAINING)가 열 권한이있는 것으로 확인되는지 확인 했습니까?

0

후에 수행된다 이상 답이 작동하지 않을 경우 당신은 iris_training.csv의 경로를 지정할 수 있습니다, 대신 decode()

if not os.path.exists(IRIS_TRAINING): 
    raw = urllib.request.urlopen(IRIS_TRAINING_URL).read() 
    with open(IRIS_TRAINING, 'wb') as f: 
     f.write(raw) 
-1

을 추가하는 바이너리로 CSV 파일을 쓸 수 있습니다 urlopen() 메서드에서 iris_test.csv 파일을 엽니 다.

관련 문제