KT 에이블스쿨 23일차(1)

박기범·2023년 3월 4일
0

에이블스쿨

목록 보기
28/95
post-custom-banner

오늘은 딥러닝 4일차로 딥러닝 학습 마지막 날이였습니다.



복습

scailing(스케일링)은 범위를 균일하게 해줌으로써 한 변수가 영향력을 과하게 행사할 수 있는 것을 방지해줍니다.

머신러닝에서는 타겟값을 건들면 안된다고 배웠지만 딥러닝에서는 각 문제에 맞게 나누었습니다. 이유는 우리는 One vs Rest라는 전략을 사용했기 때문입니다. 이 전략의 핵심은 각 클레스별로 2진분류를 수행한 것입니다. 하지만 이진분류를 수행했을 때 0~1 범위를 넘어가기 때문에 sofrmax를 사용해줬습니다. 결론적으로 원-핫인코딩을 사용해준 이유는 전략에 맞춰 이진분류로 쪼개주기 위해 사용했습니다.



딥러닝 Connection 방식

모든 노드들이 연결되어 있는 방식을 Fully Connection이라고 해서 FC라고도 부릅니다. 해당 구조를 Mulit Layer Perceptron이라고도 부릅니다.(히든레이어가 추가된 경우에)

Locally Connectied 방식은 모든 노드를 연결하는 것이 아니라 feture간의 연결을 제어해서 새로운 feture를 뽑아내는 것입니다.

▶실습
전체적인 틀은 멀티분류와 비슷하지만 feature를 개발자가 원하는 feature끼리 묶어줍니다.

▶feature 묶기

	train_x_n1 = train_x.loc[:, ['묶어줄 컬럼명1', '묶어줄 컬럼명2'] ]
	train_x_n2 = train_x.loc[:, ['묶어줄 컬럼명3', '묶어줄 컬럼명4'] ]

만약 train과 test 데이터 셋이 같이 주어졌다면 데이터 셋 모두를 묶어야 합니다.

▶모델링
전처리가 끝났고 이제 관련 있는 컬럼끼리 묶어주는 것이 끝났다면 모델링을 진행합니다.

	# 1. 세션 클리어
    clear_session()

    # 2. 레이어 사슬처럼 엮기 : input 2개!
    il_1 = Input( shape=(2,) )
    hl_1 = Dense(2, activation=relu)(il_1)

    il_2 = Input( shape=(2,) )
    hl_2 = Dense(2, activation=relu)(il_2)

    cl = Concatenate()([hl_l, hl_w])
    ol = Dense(3, activation=softmax)(cl)

    # 3. 모델 시작과 끝 지정
    model = Model([il_1, il_w2], ol)

    # 4. 모델 컴파일
    model.compile(loss='categorical_crossentropy', metrics=['accuracy'],
                  optimizer='adam')

일반적인 Fully Connection과 다른 점은 InputLayer가 여러개라는 점입니다. InputLayer를 여러개 작성을 했고 히든레이어 작성도 끝났다면 Concatenate함수를 통해 두개의 InputLayer를 합쳐줍니다.

▶시각화
시각화를 하면 아래와 같은 결과를 얻을 수 있습니다.

	plot_model(model, show_shapes=True)

나머지 과정은 똑같기 때문에 생략하도록 하겠습니다.



딥러닝 Add 방식

여기서 add는 Sequention()의 모델을 쌓는 add와는 다른 add입니다. Concatenate와는 다르게 합쳐진 노드(새로운 feature)를 더해줍니다. 즉 유사한 특징의 노드를 합쳐주어 그 의미를 살린다는 방식을 가지고 있습니다.

▶실습
마찬가지로 add도 같은 특징 혹은 유사한 특징을 가진 노드들을 묶어줍니다.

▶모델링
바로 모델링을 보겠습니다.

	import tensorflow as tf
    from tensorflow import keras

    keras.backend.clear_session()

    il_1 = keras.layers.Input(shape=(2,))
    hl_1 = keras.layers.Dense(4, activation='relu')(il_1)

    il_2 = keras.layers.Input(shape=(2,))
    hl_2 = keras.layers.Dense(4, activation='relu')(il_2)

    hl = keras.layers.Add()([hl_1, hl_2])
    ol = keras.layers.Dense(3, activation = 'softmax')(hl)

    model = keras.models.Model(inputs=[il_1, il_2], outputs=ol)

    model.compile(loss=keras.losses.categorical_crossentropy, metrics=['accuracy'], optimizer = 'adam')

Concatenate 함수 대신에 Add를 사용합니다.







딥러닝의 마지막 날이였습니다. 짧았고도 길었던 딥러닝이라고 생각합니다. 복습하면서 차근차근 흡수해야겠습니다.




※공부하고 있어 다소 틀린점이 있을 수 있습니다. 언제든지 말해주시면 수정하도록 하겠습니다.
※용어에 대해 조금 공부 더 해서 수정하겠습니다.

profile
개발자가 되기 위한 한걸음
post-custom-banner

0개의 댓글