작성
·
378
0
답변 2
0
0
안녕하십니까,
Tensorflow v1은 이제 기억이 안나는군요. 하지만 힘을 짜내서 기억해보면,
Tensorflow v1의 epoch 라는 개념은 Keras가 적용된 Tensorflow v2의 epoch 개념과 다릅니다.
Keras의 epoch는 batch size 기반으로 Gradient Descent를 적용하는 것을 전체 학습 데이터에 한번은 다 적용하면 그게 epoch 1회 입니다.
가령 20000 개의 학습데이터가 있고, batch_size가 10이면 2000번 batch Gradient Descent를 하게 되니까,
만약 전체 epoch 횟수를 50으로 했으면
첫번째 epoch는 1/50
그리고 batch GD 는 1/2000, 2/2000,.... 순으로 2000번 반복합니다. 그런 20000개의 학습데이터다 일단은 다 batch GD에 한번씩 포함되어 계산되었습니다.
그리고 두번째 epoch는 2/50
그리고 batch GD는 동일하게 1/2000, 2/2000,.... 순으로 2000번 반복합니다.
이런식으로 epoch를 50회 반복합니다.
따라서 epoch를 50회 설정하면 총 수행하는 batch GD는 50회(epoch) x 2000회(Batch GD횟수)가 되어 100,000번 수행 됩니다.
Tensorflow v1의 epoch는 위에서 설명드린 개념은 아닙니다. epoch라기 보다는 iteration(Batch GD 반복횟수)라고 보시면 됩니다.
그래서 학습 코드를 짤 때 max_iter( 또는 max_epochs) = 100, 000 라고 설정하면 학습 데이터를 batch 사이즈 만큼 순차적으로 가져와서 batch GD를 100,000회 반복하게 됩니다.
아래는 tensorflow 1.x 코드 입니다. max_epochs를 100,000회 설정하고, batch size가 10이라면 20,000개의 학습 데이터를 순차적으로 10개 만큼의 데이터만 추출하고 batch GD 수행하는 작업을 100,000회 수행합니다.
그럼 10개씩 2000번 수행하면 20,000개 학습 데이터가 1회 학습이 끝납니다(즉 이 경우는 KERAS Epoch 1회에 해당합니다.) 이렇게 100,000 번 수행하게 되는 keras epoch 50회에 해당하는 학습이 완료 되게 됩니다.
with tf.Session() as sess:
sess.run(init)
for epoch in range(max_epochs):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
sess.run(step, feed_dict = {x_in: batch_xs, y : batch_ys})
if epoch % 1000 == 0:
acc_train = sess.run(accuracy, feed_dict=
{x_in: mnist.train.images,
y: mnist.train.labels})
print('Epoch: {0} Accuracy Train%: {1} '
.format(epoch,acc_train/600))