-
Tensorflow iris 붓꽃 모델 자격증 공부AI/Tensorflow 2020. 12. 22. 16:48728x90
세번째 모델에 대한 공부이다.
구글링을 해보면 참 많이 나오는 dataset이며 초기 공부에 많이 쓰이는 붓꽃분류 모델이다.
Python을 이용하여 작성하였으며 각 코드에 대해서는 주석으로 메모를 해 놓았다.
시험에는 dataset전처리 및 확인 모델링등이 자주 나온다고 하니 꼭 알아두도록 하자.
from IPython.display import Image Image('https://user-images.githubusercontent.com/15958325/56006707-f69f3680-5d10-11e9-8609-25ba5034607e.png') import numpy as np import tensorflow as tf import tensorflow_datasets as tfds from tensorflow.keras.layers import Dense from tensorflow.keras.models import Sequential from tensorflow.keras.callbacks import ModelCheckpoint #data = tfds.load('iris', split=tfds.Split.TRAIN.subsplit(tfds.percent[:80])) #옛날방식이다. train_dataset = tfds.load('iris', split='train[:80%]') valid_dataset = tfds.load('iris', split='train[80%:]') #dataset전처리 #dataset의 확인 #for data in train_dataset.take(5): # x = data['features'] # y = data['label'] # y = tf.one_hot(y, 3) #3에는 dataset에서 num_classes숫자를 찾아넣어준다. #print(x) #print(y) #dataset확인 후 전처리 def preprocess(data): x = data['features'] y = data['label'] y = tf.one_hot(y, 3) return x, y #data mapping BATCH_SIZE = 10 #batch? batch_size 는 한개의 batch에 들어가는 data의 수 # batch_size = 10 이면 batch =100개 data가 1000개 일 경우 100번의 update가 일어난다. # batch_size가 작으면, 학습이 정교하게된다. 느려진다. # batch_size가 크면, 속도가 빠르다. 정교함이 떨어진게 된다. train_dataset = train_dataset.map(preprocess).batch(BATCH_SIZE) #학습데이터 valid_dataset = valid_dataset.map(preprocess).batch(BATCH_SIZE) #검증데이터 #모델링 #이제 Modeling을 할 차례입니다. #Sequential 모델 안에서 층을 깊게 쌓아 올려 주면 됩니다. #input_shape는 Iris 꽃 데이터셋의 X의 feature 갯수가 4개 이므로 (4, )로 지정합니다. #깊은 출력층과 더 많은 Layer를 쌓습니다. #Dense Layer에 activation='relu'를 적용합니다. #분류(Classification)의 마지막 층의 출력 숫자는 분류하고자 하는 클래스 갯수와 같아야 합니다. model = tf.keras.models.Sequential([ #input_shape는 x의 feature갯수가 4개이므로 (4,)로 지정한다. Dense(512, activation='relu', input_shape=(4,)), Dense(256, activation='relu'), Dense(128, activation='relu'), Dense(64, activation='relu'), Dense(32, activation='relu'), #Classification을 위한 Sformax, 클래스 갯수 = 3개 Dense(3, activation='softmax') #2개이상이면 softmax ]) #model compile #optimizer는 가장 최적화가 잘되는 알고리즘인 'adam'을 사용합니다. #loss설정 #출력층 activation이 sigmoid 인 경우: binary_crossentropy #출력층 activation이 softmax 인 경우: #원핫인코딩(O): categorical_crossentropy #원핫인코딩(X): sparse_categorical_crossentropy) #metrics를 'acc' 혹은 'accuracy'로 지정하면, 학습시 정확도를 모니터링 할 수 있습니다. #전처리 단계에서 one-hot encoding 을 해주었습니다. 따라서, categorical_crossentropy를 지정해주면 됩니다. model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc']) #ModelCheckpoint: 체크포인트 생성 #val_loss 기준으로 epoch 마다 최적의 모델을 저장하기 위하여, ModelCheckpoint를 만듭니다. #checkpoint_path는 모델이 저장될 파일 명을 설정합니다. #ModelCheckpoint을 선언하고, 적절한 옵션 값을 지정합니다. checkpoint_path = 'my_checkpoint.ckpt' checkpoint = ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, save_best_only=True, monitor='val_loss', verbose=1) #학습 (fit) #validation_data를 반드시 지정합니다. #epochs을 적절하게 지정합니다. #callbacks에 바로 위에서 만든 checkpoint를 지정합니다. history = model.fit(train_dataset, validation_data=(valid_dataset), epochs=20, callbacks=[checkpoint], ) #학습 완료 후 Load Weights (ModelCheckpoint) #학습이 완료된 후에는 반드시 load_weights를 해주어야 합니다. #그렇지 않으면, 열심히 ModelCheckpoint를 만든 의미가 없습니다. #checkpoint를 저장한 파일명을 입력합니다. model.load_weights(checkpoint_path) #학습 Loss (오차)에 대한 시각화 import matplotlib.pyplot as plt plt.figure(figsize=(12,9)) plt.plot(np.arange(1,21), history.history['loss']) plt.plot(np.arange(1,21), history.history['val_loss']) plt.title('Loss / Val Loss', fontsize=20) plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend(['loss', 'val_loss'], fontsize=15) plt.show() plt.figure(figsize=(12,9)) plt.plot(np.arange(1,21), history.history['acc']) plt.plot(np.arange(1,21), history.history['val_acc']) plt.title('Acc / Val Acc', fontsize=20) plt.xlabel('Epochs') plt.ylabel('Acc') plt.legend(['acc', 'val_acc'], fontsize=15) plt.show()
iris 붓꽃 dataset에는 3종류의 classfication이 되어 있고 이것은 4가지의 변수로 정하게 되어있다.
모델링은 했지만 이미지나 뭔가를 입력해서 값을 출력하는 것은 없다.
단지 모델의 loss 와 acc 값만 출력하는 plot가 있을 뿐이다.
728x90반응형'AI > Tensorflow' 카테고리의 다른 글
Tensorflow Dense Layer (0) 2020.12.23 ML Tensorflow 용어 정리 (0) 2020.12.23 Tensorflow Fashion MNIST 에서 CNNs 사용 모델 (0) 2020.12.18 TensorFlow 두번째 모델 Fashion MNIST (0) 2020.12.17 텐서플로우(Tensorflow) 처음 모델 만들기 (0) 2020.12.16