Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- loop 문
- 히스토그램 그리기
- 막대그래프
- sqld
- difftime
- 팀스파르타
- 빅데이터분석
- 회귀분석
- sql
- 데이터분석가
- merge
- 정보획득량
- 빅데이터
- 상관관계
- 데이터분석
- count
- Sum
- %in%
- 회귀분석 알고리즘
- 단순회귀 분석
- Intersect
- 그래프 생성 문법
- 순위출력
- 총과 카드만들기
- Dense_Rank
- 불순도제거
- max
- 여러 데이터 검색
- 그래프시각화
- if문 작성법
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] 딥러닝_6. 2층 신경망 구현하기 본문
■ 2층 신경망 구현하기(수치미분을 이용해서 학습 시키기)
신경망 학습의 원리를 이해시키기 위해서 필요한 단원
신경망 학습을 2가지 방법으로 시킬 수 있습니다.
1. 수치 미분을 이용한 방법(4장)
--> 장점: 어떻게 학습되는지 확실히 이해할 수 있음
단점: 학습이 너무 느리다.
2. 오차 역전파를 이용한 방법(5장)
--> 장점: 학습이 빠릅니다.
단점: 신경망 학습의 원리를 이해하기가 어려움
지금 현장에서 사용하고 있는 모든 신경망을 오차 역전파를 이용한 방법입니다.
▣ 크로스 엔트로피 오차함수
* 오차함수란 ? 신경망이 예측한 예측값과 진짜 정답과의 오차를 출력해주는 함수
* 오차함수의 종류 2가지 ?
1. 교차 엔트로피 오차함수(cross entropy error) : 분류 문제를 풀때 사용
2. 평균 제곱 오차함수(mean squared error) : 수치 예측을 할때 사용
예제
1. 교차 엔트로피 오차함수의 수학식을 확인하시오 !
2. 교차 엔트로피 오차 함수의 원리를 이해하시오
3. 교차 엔트로피 오차 함수를 파이썬으로 생성하시오
def cross_entropy_error(y,t): delta = 0.0000001 # 0 은 아닌데 0에 아주 가까운수 return = np.sum(t* np.log(y + delta)
설명: 위 식과는 다르게 아주 작은 수인 delta를 y에 더해주는 이유는?
-> y 가 0이 되게 되면 마이너스 무한대가 되기 때문에 마이너스 무한대가 출력되지 않도록 아주 작은 값을 y에 더한 것 입니다.
4. 예측값과 정답을 위해서 만든 교차 엔트로피 함수에 넣고 오차를 출력하시오.
설명: 0.3566748010815999 값이 0에 가까워 지도록 신경망을 학습시키는 것 입니다.def cross_entropy_error(y,t): delta = 0.0000001 # 0 은 아닌데 0에 아주 가까운수 return -np.sum(t* np.log(y + delta)) y = np.array([0.7, 0.2, 0.1]) t = np.array([1, 0, 0]) print(cross_entropy_error(y,t))
-> 신경망을 통해서 풀고자 하는 문제가 수치 예측인지 분류인지를 명확하게 알고 있으면 관련한 오차함수만 거기에 맞게 잘 선택하면됩니다.
1. 분류 ---------------> 교차 엔트로피 함수
2. 수치예측-----------> 평균 제곱 오차 함수
▣ 4.2 평균제곱 오차함수
예제
1. 평균 제곱 오차의 함수 식인 식 4.1 을 표시하시오 !
2. 식 4.1 을 보고 평균제곱 오차함수를 파이썬으로 생성하시오 ! (p113)
def mean_squared_error( y, t ): return 0.5 * np.sum( ( y - t ) ** 2 )
3. 평균 제곱 오차함수에 다음의 데이터를 입력하고 오차를 출력하시오 !
# 예측값 y = np.array([ 0.1, 0.05, 0.6, 0.05, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0 ] ) # 예측 숫자 2 # 정답 t = np.array([ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ]) # 정답 2 def mean_squared_error( y, t ): return 0.5 * np.sum( ( y - t ) ** 2 ) print( mean_squared_error( y, t ) ) # 0.09250000000000003
지금 진행하고 있는 포트폴리오가 숫자를 예측하는 포트폴리오면 수치를 예측하는 신경망을 만드시면 됩니다.
4. 보스톤 하우징 집값을 예측하는 신경망을 만드시오 !
import tensorflow as tf import numpy as np import random tf.random.set_seed(777) np.random.seed(777) random.seed(777) #1. 보스톤 하우징 데이터를 불러옵니다. from tensorflow.keras.datasets.boston_housing import load_data (x_train, y_train), (x_test, y_test) = load_data( path='boston_housing.npz', test_split=0.2, seed=777) print( x_train.shape) # (404, 13) print( y_train.shape) # (404,) print( x_test.shape) # (102, 13) print( y_test.shape) # (102,) #2. 모델을 생성합니다. from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense model = Sequential() #3. 층을 구성합니다. model.add( Dense( 64, activation ='relu', input_shape=(13, ) ) ) # 은닉 1층 model.add( Dense( 32, activation = 'relu') ) # 은닉 2층 model.add( Dense(1) ) # 출력층 3층 , 집값 1개가 출력되므로 뉴런 1개만 필요 #4. 모델 학습 방법을 지정합니다. model.compile( optimizer='adam', # 경사하강법 loss='mse', # 오차함수 metrics=['mae'] ) #오차를 줄이겠금 학습 시키겠다. #5. 모델을 훈련 시킵니다. model.fit( x_train, y_train, epochs=100) #6. 예측값을 출력합니다. result = model.predict( x_test ) result #7. 모델의 성능을 확인합니다. (정답 집값과 예측 집값과의 상관계수) import numpy as np a = result.flatten() # 1차원으로 변경 np.corrcoef( a, y_test )
4. 상관 계수가 0.8 이상이 되도록 하시오import tensorflow as tf import numpy as np import random import os # 모든 랜덤 시드 고정 tf.random.set_seed(777) np.random.seed(777) random.seed(777) os.environ['PYTHONHASHSEED'] = '777' # GPU 비활성화 os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # CPU만 사용 # 결정론적 실행을 보장하는 옵션 설정 os.environ['TF_DETERMINISTIC_OPS'] = '1' # 1. 보스턴 하우징 데이터를 불러옵니다. from tensorflow.keras.datasets.boston_housing import load_data (x_train, y_train), (x_test, y_test) = load_data(path='boston_housing.npz', test_split=0.2, seed=777) # 2. 모델을 생성합니다. from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.regularizers import l2 model = Sequential() # 3. 층을 구성합니다. (더 깊고 정규화된 네트워크) model.add(Dense(128, activation='relu', input_shape=(13,), kernel_regularizer=l2(0.01))) # 은닉 1층 model.add(Dropout(0.2)) # 드롭아웃 추가 model.add(Dense(64, activation='relu', kernel_regularizer=l2(0.01))) # 은닉 2층 model.add(Dropout(0.2)) # 드롭아웃 추가 model.add(Dense(32, activation='relu', kernel_regularizer=l2(0.01))) # 은닉 3층 model.add(Dense(1)) # 출력층 # 4. 모델 학습 방법을 지정합니다. model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), # 학습률 조정 loss='mse', # 평균 제곱 오차 metrics=['mae']) # 평균 절대 오차 # 5. 모델을 훈련 시킵니다. model.fit(x_train, y_train, epochs=200, batch_size=16, validation_split=0.2) # 6. 예측값을 출력합니다. result = model.predict(x_test) # 7. 모델의 성능을 확인합니다. (정답 집값과 예측 집값과의 상관계수) import numpy as np a = result.flatten() # 1차원으로 변경 np.corrcoef( a, y_test )
'빅데이터 분석(with 아이티윌) > deep learning' 카테고리의 다른 글
[빅데이터분석] 딥러닝_8. 2층 신경망 구현하기(오차 역전파로 2층 신경망 학습시키기) (0) | 2024.10.10 |
---|---|
[빅데이터분석] 딥러닝_7. 미니배치/수치미분/사진인식(mnist) (0) | 2024.10.10 |
[빅데이터분석] 딥러닝_5. 출력층 함수 소프트 맥스 함수 (0) | 2024.10.07 |
[빅데이터분석] 딥러닝_3. 하이퍼블릭 탄젠트 함수/렐루함수 (2) | 2024.10.04 |
[빅데이터분석] 딥러닝_2. Matplotlib를 이용한 시각화 / 퍼셉트론 / 신경망 구현 / 활성화 함수 (0) | 2024.10.02 |