Data Science/Tensorflow2.0, Pytorch

7. Tensorflow2.0 Optimization & Training (Keras)

HJChung 2020. 3. 27. 18:37

이전 시간에는 keras에서 제공하는 방식으로 optimization과 Training을 beginner 수준으로 쉽게 해 보았습니다. 

여기에서는 공식 홈페이지에서 expert 버젼으로 소개하고 있는 Optimization, Training방식을 배워보도록 하겠습니다. 

 

그 전에, keras를 이용하여 ptimization과 Training을 표현하는 다른 방법을 먼저 알아보고 다음 페이지에서 본격적으로 

expert 방법을 살펴보도록 하겠습니다. 

 

 

https://www.tensorflow.org/tutorials/quickstart/advanced?hl=en

 

텐서플로 2.0 시작하기: 전문가용  |  TensorFlow Core

Note: 이 문서는 텐서플로 커뮤니티에서 번역했습니다. 커뮤니티 번역 활동의 특성상 정확한 번역과 최신 내용을 반영하기 위해 노력함에도 불구하고 공식 영문 문서의 내용과 일치하지 않을 수 있습니다. 이 번역에 개선할 부분이 있다면 tensorflow/docs 깃헙 저장소로 풀 리퀘스트를 보내주시기 바랍니다. 문서 번역이나 리뷰에 참여하려면 docs-ko@tensorflow.org로 메일을 보내주시기 바랍니다. 이 문서는 구글 코랩(Colaboratory

www.tensorflow.org

import tensorflow as tf
import numpy as np 

from tensorflow.keras import layers

일단 과정은 beginner와 같습니다. 

 

1. Dataset 사용

1)

.from_tensor_slices, 

.shuffle(shuffle_size)

.batch(batch_size) 를 설정해줍니다. 

#1. data를 불러오는 방법부터 beginner와 약간 다릅니다.

mnist = tf.keras.datsets.mnist

#load_data from mnist
(X_train, y_train), (X_test, y_test) = mnist.laod_data()

#channel 차원 추가
X_train = X_train[..., tf.newaxis]
X_test = X_test[..., tf.newaxis]

#Data Normalizationㅍ
X_train, X_test = X_train/255.0, X_test/255.0

#########여기서부터 달라집니다. #############
#tf.data이용
train_ds = tf.data.Datasets.from_tensor_slices((X_train, y_trian))

#이 train_ds을 iteration하면 batch size에 맞게 데이터가 나오게 여러 설정을 해준다. 
train_ds = train_ds.shuffle(1000)
train_ds = train_ds.batch(32) #batch 설정

#train 해 주었으니 test도 마찬가지
test_ds = tf.data.Datasets.from_tensor_slices((X_test, y_test))
test_ds = test_ds.batch(32)

2) data visualize

import matplotlib.pyplot as plt
%matplotlib inline

for image, label in train_ds.take(2): #.take(@): @개만 가져오라는 의미 batch로 묶어줬기 때문에
	plt.title(label[0])
    plt.imshow([0, :, ;, 0], 'gray')
    plt.show()
    
    

2. Optimization

#keras로 compile하는 방법
model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy') 

#이전에 beginner에서 compile 했던 방법
loss_func = tf.keras.losses.sparse_categorical_crossentropy
optm = tf.keras.optimizer.Adam()

model.compile(optimize = optm, loss = loss_func)

3. Training

#keras로 fit해주는 방법 
#train_ds에 batch_size, shuffle 을 이미 다 해주었기 때문에 epochs만 해주어도 됩니다. 
model.fit(train_ds, epochs = num_epochs)

#이전에 beginner에서 fit 했던 방법
model.fit(X_train, y_train, batch_size = batch_size, shuffle = True, epochs = num_epochs)