59doit

다중분류 신경망(3) 본문

인공지능

다중분류 신경망(3)

yul_S2 2023. 1. 13. 09:35
반응형

 텐서플로와 케라스 사용 

 

# 모델생성하기

from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()

▶ tensorflow.keras 모듈안에 있는 
Sequential 클래스와 Dense 클래스를 임포트하고 
Sequential : 객체 생성

 

 

 

# 은닉층과 출력층을 모델에 추가

model.add(Dense(100, activation='sigmoid', input_shape=(784,)))
model.add(Dense(10, activation='softmax'))

▶ 은닉층의 유닛개수는 100개, 출력층 유닛개수 10개
-> 첫번째 매개변수에 각각 100,10 지정
은닉층의 활성화 함수는 sigmoid 함수
출력층의 활성화 함수는 softmax 함수 지정

input_shape에는 입력데이터의 크기를 지정해야한다.
28*28 크기의 이미지를 펼쳐 784이고, 
입력 행렬의 첫번째 차원은 입력 데이터의 개수이므로 나머지 차원만(784,) 같이 튜플형태로 입력
신경망 구성할 땐 샘플 개수는 필요하지 않다.

 

 

 

 

# 최적화 알고리즘 손실함수 지정

model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])

▶ 최적화 알고리즘으로는 sgd(경사하강법),
손실함수는 crossentropy손실함수 사용
각각 optimizer, loss에 지정

compile 메서드에 추가한 metrics매개변수는 훈련과정 기록으로 정확도를 남기기 위함

 

 

 

 

# 훈련하기

history = model.fit(x_train, y_train_encoded, epochs=40,
                    validation_data=(x_val, y_val_encoded))
print(history.history.keys())

▶ 모델을 훈련하며 기록한 정보
History 객체에 기본값으로 손실값(loss)기록
-> 모델의 정확도에 대한 기록도 살펴 봐야 하므로 위에서 metrics=['accuracy'] 를 추가한것

 

 

 

 

# 손실그래프와 정확도 그래프 그리기

# 손실그래프

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train_loss', 'val_loss'])
plt.show()

 

 

 

# 정확도그래프

plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train_accuracy', 'val_accuracy'])
plt.show()

▶ 

 

 

 

# 정확도

loss, accuracy = model.evaluate(x_val, y_val_encoded, verbose=0)
print(accuracy)
# 0.8630833625793457

 

반응형

'인공지능' 카테고리의 다른 글

합성곱(2)  (4) 2023.01.17
합성곱(1)  (1) 2023.01.17
다중분류 신경망(2)  (0) 2023.01.12
다중분류 신경망(1)  (0) 2023.01.12
다층신경망(2) 미니배치  (7) 2023.01.11
Comments