Tensorflow 101

텐서플로우를 이용하여 가장 간단한 형태의 텐서플로우 코드를 작성하여 딥러닝을 구현해보는 딥러닝 기초 수업입니다.

네번째 딥러닝 - 신경망의 완성:히든레이어

수업소개

히든레이어와 멀티레이어의 구조를 이해하고, 히든레이어를 추가한 멀티레이어 인공신경망 모델을 완성해 봅니다. 

강의 

 

멀티레이어 신경망

 

실습 

 

소스코드

colab |  backend.ai

보스턴 집값 예측

##########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd

###########################
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)

# 종속변수, 독립변수
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 
            'rm', 'age', 'dis', 'rad', 'tax',
            'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)

###########################
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(10, activation='swish')(X)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')

# 모델 구조 확인
model.summary()

###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)

###########################
# 4. 모델을 이용합니다
print(model.predict(독립[:5]))
print(종속[:5])

###########################
# 모델의 수식 확인
print(model.get_weights())

아이리스 품종 분류

###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd

###########################
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로)

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

# 종속변수, 독립변수
독립 = 아이리스[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 아이리스[['품종_setosa', '품종_versicolor', '품종_virginica']]
print(독립.shape, 종속.shape)

###########################
# 2. 모델의 구조를 만듭니다
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')

# 모델 구조 확인
model.summary()

###########################
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=100)

###########################
# 4. 모델을 이용합니다
print(model.predict(독립[:5]))
print(종속[:5])

 

댓글

댓글 본문
  1. Sansol Park
    안녕하세요! TensorFlow를 사용해 딥러닝을 공부하고 계시다니 멋집니다. 질문 주신 내용에 대해 답변드리겠습니다.

    딥러닝 모델은 일반적으로 입력 데이터의 각 특성(피처)에 대해 자동으로 가중치를 학습합니다. 따라서 특정 컬럼(피처)에 우선순위를 직접 설정하는 기능은 기본적으로 제공되지 않습니다. 하지만, 몇 가지 방법을 통해 특정 피처에 더 높은 가중치를 줄 수 있는 방법이 있습니다.

    ### 1. **피처 스케일링** (Feature Scaling)
    피처의 값 범위를 조정하여 모델이 특정 피처에 더 큰 가중치를 두도록 유도할 수 있습니다. 예를 들어, 중요한 피처의 값을 더 크게 조정하면 모델이 해당 피처를 더 중요하게 생각할 가능성이 높아집니다. 하지만 이 방법은 간접적이므로, 모델이 반드시 그 피처에 더 높은 가중치를 두는 것은 아닙니다.

    ### 2. **피처의 복제** (Feature Duplication)
    중요한 피처를 여러 번 복제하여 입력 데이터에 추가하는 방법입니다. 예를 들어, '꽃잎길이' 피처가 중요하다면, 이를 복제하여 입력으로 사용하면 모델이 이 피처를 더 중요하게 학습할 가능성이 있습니다.

    ### 3. **커스텀 손실 함수** (Custom Loss Function)
    손실 함수에서 특정 피처에 대한 가중치를 높이는 방법도 있습니다. 하지만 이 방법은 손실 함수의 정의와 설계가 복잡할 수 있으므로, 초보자에게는 다소 어려울 수 있습니다.

    ### 4. **특정 레이어에 가중치 초기화** (Custom Layer Initialization)
    모델의 첫 번째 Dense 레이어에서 특정 피처에 대한 가중치를 초기화하는 방법도 있습니다. 예를 들어, 가중치 초기화 시 중요한 피처에 높은 가중치를 주도록 설정할 수 있습니다.

    ### 결론
    위와 같은 방법들을 통해 특정 피처에 우선순위를 줄 수 있지만, 딥러닝 모델의 본질은 데이터를 기반으로 자동으로 패턴을 학습하는 것입니다. 따라서 이런 수작업적인 조작보다는 충분한 데이터로 학습시키고, 필요시 피처 엔지니어링을 통해 모델이 원하는 대로 학습되도록 유도하는 것이 더 좋을 수 있습니다.

    추가 질문이 있으시면 언제든지 댓글로 남겨주세요!
    대화보기
    • 시아네스
      231109.
    • dudjswp
      안녕하세요.

      올려주신 자료로 열심히 tensorflow 공부하고 있습니다.

      항상 감사합니다.

      상기 예제의 IRIS 분류와 관련해서 질문사항 있어서 댓글 올립니다.

      혹시 데이터 학습시에 특정 컬럼에 우선순위를 줄 수 있을까요 ?

      # =========================
      독립변수 = [[ '꽃잎길이' , '꽃잎폭' , '꽃받침길이' , '꽃받침폭']]
      우선순위 = [[0 ,1 ,2 ,3]]
      # =========================

      위와같이 변수별 우선순위 할당을 통해 우선순위가 높은 데이터의 유사성에 더 가중치를둬서 predict의 결과를 반환받을 수 있는지 궁금합니다.
    • kwaife
      완료
    • innerpeace
      원리를 이해하기에 가야할길이 더 많겠지만, 이렇게나 쉽게 입문시켜주셔서 감사합니다! 뜬구름 잡는 아이디어만 갖고 있었는데, 이제야 출발선에서 준비운동하고 있는 기분이예요! 감사합니다.!!!
    • 김정석
      감사합니다 재미있게 잘 배웠습니다
    • 완료
    • 인간지능
      완료!감사합니댜.
    • 김영환
      완료
    • shg7271
      210729
    • Poroporo
      완료:)
    • 한세월
      완료! 감사합니다~
    • 조예인
      감사합니다.
    • 제갈자공
      김남군 - 7/27 완료
    • Hotbrains
      완료~ 감사합니다.
    • 이덕규
      생각보다 간단한 개념이었네요!
    • songji
    • 이성민
      완료~
    • Naked Lunch
      야학 3기! 점점 인간의 뇌를 닮아가는 내 컴퓨터!
    • semin3993
      sigmoid*x=swish
    • 210721
    • minkey
      야학3기 21.07.20 완료
    • 엠제이
      잘 봤습니다. 고맙습니다.
    • 정효빈
      완료했습니다!!
    • jwoh
      21-05-06
    • 박준휘
      20210427 완료했습니다~
    • 장청룡
      20210315 완료
    • 범벌
      완료
    • 청춘낭비금물
      완료
    • ericpark
      완료했습니다.
    • Juni
      완료
    • 조지아
      완료
    • DreamComeTrue
      완료!
    • 바이크
      완료
    • agg98
      완료
    • jeseung
      완료!
    • 후니
      완료
    • 손님입장
      완료
    • nann
      완료
    • Noah
      완료
    • 차차caca
      완료!
    • 고고고고
      완료
    • 최수원
      완료!
    • 먀린이
      완료....이번 내용은 좀 어렵네요...핳하
    • 리코타
      완료
    • 궉하
      완료!
    • luckyo02
      완료
    • 코티서처
      어려우면서도 신기하다
    • John
      완료
    • 소야
      신기해요!