예시 ) 운동을 하러 갈지 말지 고민 중
1. 어제 운동을 했는가
2. 체중이 증가했는가
두 조건을 만족할 때만 운동을 하는 사람이면 AND GATE
아래 기호는 학계 약속이니 그냥 받아들이자
AND GATE의 결과를 반대로 출력
OR GATE 는 입력 신호 중 하나만 1(True)이라도 1(True)을 출력
XOR GATE 는 배타적 논리합(Exclusive-OR)이라고도 불리는 GATE 입니다. 입력 신호가 다를 경우 1(True)을 출력
XOR GATE가 초기 퍼셉트론의 한계를 지적한 이론
이걸 선형 그래프로 표현
XOR 이 하나의 결정 경계로 구분 할 수 없는 것이 보입니다.
하지만 비선형 결정 경계를 사용하면 XOR문제를 해결할 수 있습니다.
다층퍼셉트론(Multi-Layer Perceptron, MLP) 이라는 인공 신경망 알고리즘을 사용하면 해결이 가능하다.
MLP는 하나이상의 은닉층을 가진 인공 신경망으로 이러한 은닉층을 추가하여 비선형성 모델링을 실행합니다
다층 퍼셉트론은 두 개의 은닉층과 미분 가능한 시그모이드 활성화 함수를 사용하여 구축할 수 있습니다.
딥러닝 = 인공신경망 층을 깊게(Deep) 다층으로 쌓은 것
그럼 다층 쌓는 이유는?
XOR GATE를 다시 생각해보면 1개의 분류기로는 해결이 불가
그런데 AND, NAND, OR GATE를 다층으로 활용하면 XOR GATE를 구할 수 있다.
입력층, 은닉층, 출력층
Tenserflow는 딥러닝 프레임워크.
상위 API는 케라스
항상 전처리가 가장 중요. 아무리 좋은 머신러닝, 딥러닝이어도 데이터가 좋지 않으면 성능이 나오기 어렵다.
* Sequential API : 레이어를 순차적으로 연결하여 신경망을 구성하는 방법
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(1, activation='sigmoid')
])
이 코드는 은닉층이 없는 입력층 - 출력층으로만 구성된 단층 모델
tf.keras.layers.Dense 함수를 이용하여 새로운 레이어를 추가할 때, 첫 번째 인자로 지정한 숫자는 해당 레이어에 배치할 뉴런의 개수를 의미합니다. 이때, 첫 번째 레이어를 입력층으로 간주하며, 입력층에 배치할 뉴런의 개수는 input_dim 매개변수를 이용하여 지정합니다.
따라서 model = tf.keras.models.Sequential([tf.keras.layers.Dense(1, activation='sigmoid')]) 코드에서는 하나의 Dense() 레이어를 생성하며, 이 레이어는 하나의 뉴런을 가지고 있습니다. 이때, 첫 번째 레이어를 입력층으로 간주하므로, 입력층에 배치할 뉴런의 개수는 input_dim 매개변수로 지정되지 않습니다. 즉, 입력층의 노드 개수는 지정되지 않은 것으로 간주됩니다.
바꿔 쓴 동일코드
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
Functional api(함수형 API)
input = tf.keras.layers.Input(shape=(2,))
output = tf.keras.layers.Dense(1, activation='sigmoid')(input)
model = tf.keras.models.Model(inputs=input, outputs=output)
* 인공 신경망 모델 구성하기(입력,은닉,출력)
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(16, input_dim=4, activation='relu'), #입력층
tf.keras.layers.Dense(8, activation='relu'), # 은닉층
tf.keras.layers.Dense(1, activation='sigmoid')
]) # 출력층
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=['accuracy']) # 학습 지표를 정확도로 설정합니다.
아직 optimizer나 loss(손실함수) 는 추후 나올 예정
model.fit(X_train, y_train, epochs=30)
epochs 도 다음 파트에서 정리
epochs를 조정하면 학습 횟수를 조정할 수 있다.
model.evaluate(X_test, y_test, verbose=2)
데이터 전처리 -> 테스트 셋 구성 -> 신경망 구성 - > 학습 방법 설정 -> 신경망 학습 -> 평가