generator 2

Iterator, Generator

문제 두가지 아주 아주 큰 list 0부터 99,999,999까지 숫자의 제곱을 출력하는 코드를 살펴보겠습니다 for i in [i ** 2 for i in range(100000000)]: print(i) 첫번째 결과인 0의 제곱이 출력될 때까지 얼마나 걸릴까요? 제 컴퓨터에서는 약 27초가 걸렸습니다. 그냥 0의 제곱을 출력할 뿐인데 왜 이렇게 오래 걸릴까요? 문제는 바로 [i ** 2 for i in range(100000000)] 부분에 있습니다. 이 코드는 List Comprehension이기 때문에 for loop를 돌기 전에 0부터 99,999,999까지 모든 수의 제곱을 먼저 계산합니다. 그리고 만들어진 list를 대상으로 for loop가 돕니다. 하지만 우리가 하고 싶은 것은 순차적으로..

Python 2021.05.08

대용량 훈련 데이터 처리 - Generator로 TF Dataset 만들기

1. 너무 큰 데이터 tf.data.Dataset는 Tensorflow의 훈련 데이터를 다룰 때 참 편리합니다. Padding, Batch, Shuffle, Map 등을 다 지원해주니까요. 일단 데이터를 Dataset으로 변환만 시키면 그다음부터는 아주 편리하게 사용할 수 있습니다. from_tensor_slices를 쓰면 numpy array를 바로 Dataset으로 변환해주니까 더할나위 없이 편리하고요. 하지만! 이 방법에는 치명적인 문제가 있으니... 바로 변환하려는 전체 데이터가 메모리에 올릴 수 있는 크기여야 한다는 겁니다. 물론 가상 메모리를 써서 메모리를 가짜로 늘릴 수는 있지만 이 순간부터 Thrashing으로 속도가 급격하게 떨어지고, Out-of-memory로 죽기도 합니다. 이 문제가..

Deep Learning 2020.05.07