인프런 커뮤니티 질문&답변

유영재님의 프로필 이미지
유영재

작성한 질문수

딥러닝 CNN 완벽 가이드 - Fundamental 편

Sequece 부분에서 이미지, 라벨 호출할 때 질문이 있습니다

작성

·

160

0

#next(iter(cnd_ds))
images_batch = next(iter(cnd_ds))[0]
labels_batch = next(iter(cnd_ds))[1]
print(images_batch.shape, labels_batch.shape)
print(images_batch[0])

안녕하세요. 제가 파이썬 문법에 많이 약해서 헷갈리는 부분이 있어서 질문을 드립니다. 혹시 시퀀스 데이터셋에서 iterator로 만든 후 next를 호출해서 각각 0번 1번 인덱스로 호출을 하는데, 궁금한 점이 image_batch = next(iter(cnd_ds))[0]를 실행하면 내부적으로 cnd_ds에 대한 iterator가 옮겨져서 다음에 labels_batch 라인을 호출할 때는 다음 배치 64개의 label이 호출될 줄 알았는데 선생님이 의도하시던대로 잘 되어서 궁금했습니다

전에 사용하던 ImageDataGenerator에서는 지금 사용하는 앞에서 묶는 것이 아니라  따로 .next() 함수가 있던데 서로 다른 개념일까요? 

답변 3

1

권 철민님의 프로필 이미지
권 철민
지식공유자

질문을 제가 잘 이해했는지 모르겠지만,

next(iter(cnd_ds)) 를 하게 되면 __getitem__()에서 image 배치 array와 label 배치 array를 tuple 형태로 한번에 반환하게 됩니다. 그러니까, image_array, label_array = next(iter(cnd_ds)) 가 됩니다.

즉 next(iter(cnd_ds))[0]은 image_array가 되고, next(iter_cnd_ds))[1]은 label_array가 됩니다.

그리고 질문하신,

전에 사용하던 ImageDataGenerator에서는 지금 사용하는 앞에서 묶는 것이 아니라  따로 .next() 함수가 있던데 서로 다른 개념일까요?

=> 동일한 개념입니다.

0

유영재님의 프로필 이미지
유영재
질문자

아, 만약에 iterator 변수로 아예 선언하면 달라지는 것이었습니다

이렇게 되면 images와 labels가 순서 쌍이 맞지 않을텐데, 선생님이 적어주신 것이랑 같은 줄 알고 헷갈렸었습니다

cnd_iter = iter(cnd_ds)
images_batch = next(cnd_iter)[0]
labels_batch = next(cnd_iter)[1]
print(images_batch.shape, labels_batch.shape)
print(images_batch[0])

0

유영재님의 프로필 이미지
유영재
질문자

넵 cnd_ds[2][0][0], cnd_ds[2][1] Sequence니까 이렇게도 접근이 가능하네요. 감사합니다

유영재님의 프로필 이미지
유영재

작성한 질문수

질문하기