새소식

Python/opentutorials(Tensorflow)

3. Deep Learning(Hidden layer)

  • -

<Hidden layer의 설명 + 실습과 부록>

 

 

 

 

입력 부분 - Input layer

추가한 부분 - Hidden layer

출력 부분 - Output layer

 

결과를 만들기 위해서는 Hidden layer의 모든 값들을 입력으로 하는 하나의 Perceptron이 필요하다.

 

 

 

 

 위의 그림 중 왼쪽을 보면 13개의 입력(input layer) 5개의 출력(hidden layer), 오른쪽을 보면 5개의 입력(hidden layer) 1개의 출력(output layer)  -> 딥러닝, 인공 지능망의 토대라고 볼 수 있다.

 

 

 

 

< 보스턴 집값 예측 + hidden layer >

 

 모델의 구조(회귀모델)를 만드는 코드에 위의 hidden layer 추가해서 살펴보면, hidden layer의 활성화 함수(activation)는 'swish'를 사용해주고 X, H, Y는 순서대로 앞의 것을 입력으로 받아 연결시키면 되는 것이다. 양적 데이터에서 loss는 'mse' 주의

 

X = tf.keras.layers.Input(shape=[13])

H = tf.keras.layers.Dense(5, activation=‘swish’)(X)

Y = tf.keras.layers.Dense(1)(H)

model = tf.keras.models.Model(X, Y)

model.compile(loss='mse') 

 

 

< 아이리스 품종 분류 + hidden layer >

 

 모델의 구조(분류모델)를 만드는 코드에 위의 hidden layer 추가해서 살펴보면, 마지막 Y에서 활성화 함수(actication)는 'softmax'를 사용해준다. 이유는 데이터를 바꿔줘야 하기 때문이고 X,H,H,H,Y의 순서대로 앞 것을 입력으로 받아 연결시키면 되는 것이다. 범주형 데이터에서 loss는 'categorical_crossentropy' 주의 

X = tf.keras.layers.Input(shape=[4])

H = tf.keras.layers.Dense(8, activation=‘swish’)(X)

H = tf.keras.layers.Dense(8, activation=‘swish’)(H)

H = tf.keras.layers.Dense(8, activation=‘swish’)(H)

Y = tf.keras.layers.Dense(3, activation=‘softmax’)(H)

model = tf.keras.models.Model(X, Y)

model.compile( loss='categorical_crossentropy', metrics='accuracy') 

 

 

 

 

cf) 데이터 타입의 문제 + NA값의 문제를 해결하는 데이터 전처리 방법

 

< 데이터 타입 문제 >

 

 

원핫인코딩(One Hot Encoding)을 하게 되면 오류가 발생한다. 아이리스 품종 분류 데이터를 보면 숫자가 있기 때문에 범주형 칼럼으로 pandas가 인식하지 못한다. 그러므로 품종 타입을 범주형으로 바꿔줘야 한다.

 

 

 

# 품종 타입을 바꿔주는 과정

아이리스['품종'] = 아이리스['품종']. astype('category')

 

# 카테고리 타입의 변수만 원핫인코딩 

인코딩 = pd.get_dummies(아이리스)

인코딩. head()

 

 

 

 

< Na 값의 문제 >

 

NaN은 not available 유효하지 않은 값이다. 0과는 차이가 있기 때문에 바꿔주지 않으면 오류가 발생한다. 데이터에 NaN값이 있는지 체크한다. 만약 아이리스 품종 분류 데이터로 예시를 들면

 

 

# NA값 체크

아이리스. isna(). sum() 

 

isna는 na의 존재가 있는지 확인한다는 뜻이고, sum()을 통해 전체에서 찾는다.

 

 

 

# NA값이 꽃잎 폭의 열 중 존재한다면, 해당하는 열의 평균값을 넣어주는 방법이 있다.

mean = 아이리스['꽃잎 폭']. mean()

아이리스['꽃잎 폭'] = 아이리스['꽃잎 폭']. fillna(mean)

 

mean의 변수에 아이리스 columns 꽃잎 폭의 평균값을 준 후, NaN값에 fiilna를 통해 채워 넣는다.

 

 

 

 

 

출처 : https://www.opentutorials.org/module/4966/28989

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.