59doit
다중분류 신경망(3) 본문
반응형
텐서플로와 케라스 사용
# 모델생성하기
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