[골빈해커 Chapter4 정리]
[개념정리]
심층 신경망과 다층 신경망을 간단하게 구현한다.
인공 신경망은 뉴런의 동작 원리에 기초한다.
즉 입력값 X에 가중치(W)를 곱하고 편향(b)을 더한 뒤 활성화 함수(Sigmoid, ReLU 등)를 거쳐 결과값 y를 만들어 내는 것
Y = Sigmoid(X x W + b)
출력 = 활성화 함수( 입력 x 가중치 + 편향)
따라서 가중치와 편향을 찾아내는 것이 학습
Sigmoid
ReLU
tanh
분류 문제
패턴을 파악해 여러 종류로 구분하는 작업
One-hot-encoding(온핫 인코딩)
레이블 데이터 구성
데이터가 가질 수 있는 값들을 일렬로 나열한 배열을 만들고 표현하려는 값을 뜻하는 인덱스 원소만 1로 표기
나머지 원소는 모두 0으로 표기
[ 포유류, 조류, 기타] 인경우 포유류 일때 [1, 0, 0]
[Method 정리]
얕은 신경망으로 분류 문제 정의
tf.add(tf.matmul(X, W), b) = tf.matmul(X, W) + b : 행렬의 곱 연산. (곱 연산하는 이유 알기)
tf.nn.relu(레이어) : 활성 함수에 만들어놓은 레이어 넣기
tf.reduce_mean(-tf.reduce_sum(Y * tf.log(model), axis = 1) : 크로스 엔트로피 함수(손실 함수), axis는 축을 의미한다.
정확도가 66 퍼로 나온다.
깊은 신경망으로 분류 문제 정의
심층 신경망 구현
W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.)) : [2, 10] = [특징, 은닉층 뉴런수]
W2 = tf.Variable(tf.random_uniform([10, 3], -1., 1.)) : [10, 3] = [은닉층 뉴런수, 분류 수]
#tf.random_unifrom() : 균등 분포로부터 난수를 가져온다. (-1 최솟값, 1 최댓값 사이의 난수)
b1 = tf.Variable(tf.zeros([10]))
b2 = tf.Variable(tf.zeros([3]))
#tf. zeros(shape) : 모든 원소가 0인 shape을 가진 텐서를 생성한다.
L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1)
model = tf.add(L1, W2), b2)