
준비
- 앞서 포스팅에서 Data를 다음과 같이 준비를 했었다.

문제와 답을 분리

- 얘도 글자 타입을 쓰려면 원핫 인코딩, 라벨 인코딩을 실시하여야 한다.
신경망 모델 만들기
1. 신경망의 구조 설계 (병렬적 다층 구조)
- 우선 뼈대를 만들 import 부터 진행한다.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import InputLayer, Dense
model = Sequential() # 뼈대 생성
model.add(InputLayer(input_shape=(1,)))
# 입력 특성의 개수 설정 => 한 사람의 정도 data가 몇개냐? 내 모델이 받아들이는 1개의 data의 모양이 어떻게 생겼냐를 설정하는 것.
model.add(Dense(units=3, activation='linear')) # 1개층의 뉴런 개수 설정
model.add(Dense(units=3, activation='linear')) # 2개층의 뉴런 개수 설정
model.add(Dense(units=1, activation='linear')) # 3개층의 뉴런 개수 설정
- 뉴런이 여러개 있다면 선형모델이 많아진다 이는 학습능력이나 예층 능력이 올라간다는 뜻이다.
입력과 출력 모양만 잘 조절하면 결과값을 다 받아볼 수 있다.

- 만약 제일 밑의 그림처럼 입력이 여러개 있는 것이 멀티모달이라고 한다. 이는 Sequential로는 진행할 수 없다.
2. 신경망 학습, 평가 방법 설정
model.compile(loss="mean_squared_error",
optimizer="SGD")
- SGD 보다 좋은 것이 Adam이다.

- 지금 보면 평가방법을 설정하지 않았는데 딥러닝 모델을 default 값으로 알아서MSE 기법으로 잡아준다. 대신 분류 모델은 따로 넣어주여야한다.
3. 모델 학습 진행 및 결과 시각화
studentHistory = model.fit(X_train, y_train, epochs=100)

- 저기 한 사이클을 epoch라고 한다. 이때 가중치와 절편을 얘가 알아서 계속 수정한다.
- 결과 시각화
import matplotlib.pyplot as plt
plt.figure(figsize=(15,5)) # 그림의 크기 설정(가로, 세로)
plt.plot(range(1,101), studentHistory.history['loss'], label='loss') # 라인 그래프 그래기
plt.xlabel("epochs") # X축 title
plt.ylabel("loss") # y축 title
plt.legend() # 범례출력
plt.show()
4. 모델 평가
model.evaluate(X_test, y_test)
