Python

뉴럴넷에 이미지를 학습시킬때, 텐서플로우로 사용하는 코드

K2ODING 2021. 12. 1. 17:52
728x90
# 라이브러리 임포트 

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense, Flatten
model = Sequential()

model.add( Flatten()) # 알아서 이미지 사이즈 계산해서, 인풋레이어 만들어 준다.

# 히든 레이어 1개
model.add( Dense(units= 128, activation='relu'))

# 아웃풋 레이어 셋팅
# 아웃풋 레이어는, 10개로 분류하는 문제이므로,
# 노드 10개를 셋팅하고, 액티베이션 함수에는 소프트맥스(softmax)를 설정한다.

model.add( Dense(units=10, activation='softmax'
  • 이미지의 가로 세로를 전부 일렬로 만드는 작업이 flatten
  • Sequential : SEQUENCE layers 로 모델링
  • Flatten : 2차원, 3차원을 1차원으로 만드는 것
  • Dense : 뉴런을 레이어에 붙인다.
  • 각 레이어는 activation function 이 필요하다.
  • Relu effectively means "If X>0 return X, else return 0" -- so what it does it it only passes values 0 or greater to the next layer in the network.
  • Softmax 여러개의 값 중에서 가장 큰 값을 선택. [0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05], 여기서 가장 큰 값을 1로 만들고 나머지는 0으로 만들어준다. [0,0,0,0,1,0,0,0,0]
# 컴파일할때, 옵티마이저와 로스를 설정하는데,
# 2개로 분류할때의 loss 는 binary_crossentropy 를 사용 했다.

# 3개 이상으로 분류하는 경우
# y 값이 어떻게 들어있는지 확인한 후
# 1. y 값이 0,1,2,3.... 이런식으로 레이블 인코딩으로 되어있는 경우는
#    spares_categorical_crossentropy 를 사용하고
# 2. y 값이 원핫인코딩으로 들어있는 경우는 
#	 categorical_crossentropy 를 사용한다.
y_train # y 값 확인 
# 출력
array([9, 0, 0, ..., 3, 0, 5], dtype=uint8) # 레이블 인코딩

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']
model.fit(X_train, y_train, epochs=5) #학습
# 출력
Epoch 1/5
1875/1875 [==============================] - 7s 3ms/step - loss: 0.5017 - accuracy: 0.8248
Epoch 2/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3741 - accuracy: 0.8654
Epoch 3/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3358 - accuracy: 0.8771
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.3156 - accuracy: 0.8840
Epoch 5/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2960 - accuracy: 0.8900
<keras.callbacks.History at 0x7f0af6daf7d0>
model.evaluate(X_test, y_test) # 정확도
# 출력
313/313 [==============================] - 1s 3ms/step - loss: 0.3485 - accuracy: 0.8740
[0.34848690032958984, 0.8740000128746033]