인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

JUNGRYO LEE님의 프로필 이미지
JUNGRYO LEE

작성한 질문수

TensorFlow 2.0으로 배우는 딥러닝 입문

TensorFlow 2.0과 Softmax Regression을 이용한 MNIST 숫자분류기 구현

train_data = train_data.repeat().shuffle(60000).batch(100)

작성

·

491

0

train_data = train_data.repeat().shuffle(60000).batch(100)
여기에서 repeat과 shuffle의 의미도 설명부탁드립니다.

답변 1

1

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요~. 반갑습니다.

1. repeat()

repeat()의 경우 전체 epoch의 반복횟수를 지정하는 옵션입니다.  즉 60000개의 mnist 트레이닝 데이터가 있다면 이를 몇번의 epoch 동안 반복할지를 결정합니다.

기본적으로 repeat() 형태로 지정하면 무한한 epoch만큼 반복하게 됩니다.

예를 들어 

https://github.com/solaris33/deep-learning-tensorflow-book-code/blob/725016cb715c9df62a42d58cfce20614ca6810ba/Ch04-Machine_Learning_Basic/mnist_classification_using_softmax_regression_v2_keras.py#L18

코드에서 repeat()을 빼버리면

60000(mnist 트레이닝 데이터의 개수) / 100(batch_size) = 600

해서 600번(=1번의 epoch)만 학습할 수 있어서

https://github.com/solaris33/deep-learning-tensorflow-book-code/blob/725016cb715c9df62a42d58cfce20614ca6810ba/Ch04-Machine_Learning_Basic/mnist_classification_using_softmax_regression_v2_keras.py#L65

위에서처럼 1000번 반복을 수행하는 형태로 학습을 진행할 수 없습니다.(즉, 1000번 반복이 가능한 이유는 repeat() 설정으로 무한한 epoch 반복 설정이 지정되어 있기 때문입니다.)

2. shuffle()

shuffle()은 1번의 epoch이 끝났을때 전체 데이터의 순서를 한번 무작위로 섞어주는(shuffle) 옵셥입니다. 이때 인자로 섞을 데이터의 개수를 지정해줄 수 있는데 보통은 아래처럼

https://github.com/solaris33/deep-learning-tensorflow-book-code/blob/725016cb715c9df62a42d58cfce20614ca6810ba/Ch04-Machine_Learning_Basic/mnist_classification_using_softmax_regression_v2_keras.py#L18

전체 데이터의 개수를 1번의 epoch이 끝났을때 섞어주는 것이 일반적인 패턴입니다.(60000=mnist 트레이닝 데이터의 개수)


추가적인 내용은 아래 링크를 참조하세요.
https://www.tensorflow.org/api_docs/python/tf/data/Dataset

감사합니다.

JUNGRYO LEE님의 프로필 이미지
JUNGRYO LEE

작성한 질문수

질문하기