25.11.09 개발일지 / 딥러닝4

2025. 11. 14. 14:13·LMS 7/개발일지

Chapter10. 딥러닝 모델 설계하기

https://marin0806.tistory.com/191

 

25.11.03 개발일지 / 딥러닝 1(모두의 딥러닝 개정4판)

딥러닝 모델 설계# 1.from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense# 2.import numpy as np# 3.!git clone https://github.com/taehojo/data.git# 4.Data_set = np.loadtxt("./data/ThoraricSurgery3.csv", delimiter=","

marin0806.tistory.com

Sequential()

: 입력부터 출력까지 순서대로 층을 쌓는 단순 신경망 모델

은닉층

: 기존 입력층 -> 출력층만 있는 선형관계에서는 해결할 수 없던 비선형 문제를 해결할 수 있는 추가된 층

옵티마이저

: 가중치를 업데이트 할 수 있는 인자(예로는 경사 하강법)

모델 컴파일

: 모델을 학습할 방법을 설정하는 과정임


Chapter11. 데이터 다루기

1. 데이터 가져오기

> 데이터는 저자 깃허브의 Data를 활용해야 함

cd Desktop // 바탕화면
git init
git clone https://github.com/taehojo/data.git

2. pandas를 활용한 데이터 조사

1) head()

> 위의 인덱스를 뽑아오기

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')
print(df.head(5)) // 5개만

2) df[]

> 특정 컬럼을 불러오기

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')
print(df["diabetes"].value_counts())

 

3) discribe()

> 컬럼별 정보

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')
print(df.describe())

▲ count(샘플 수), mean(평균), std(표준편차), min(최솟값), 25~75%(백분위수), max(최댓값)

 

4) corr()

> 상관관계

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')
print(df.corr())

4.1) matplotlib을 활용한 그래프 시각화

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')
print(df.corr())

// 그래프 시각화
colormap = plt.cm.gist_heat // 색상 구성
plt.figure(figsize=(12,12)) // 크기
// 상관계수 행렬, 셀 두께, 색상 최대값, 색상맵, 칸 경계선 색, 셀 안 숫자
sns.heatmap(df.corr(), linewidths=0.1, vmax=0.5, cmap=colormap,
            linecolor='white', annot=True)
plt.show()

3. 데이터 추출

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('data/pima-indians-diabetes3.csv')

// x축에 표시할 데이터, x축 히스토그램 구간, 히스토그램 형태, 범례 이름
plt.hist(x=[df.plasma[df.diabetes==0], df.plasma[df.diabetes==1]], bins=30,
        histtype='barstacked', label=['normal', 'diabetes'])
plt.legend() // label을 실제 표시
plt.show()

> diabetes와 plasma의 상관관계를 그래프로 나타냄

4. 피마 인디언 당뇨병 예측 모델

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

// 텐서플로 케라스 API
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

!git clone https://github.com/taehojo/data.git
df = pd.read_csv('./data/pima-indians-diabetes3.csv')

// x에 모든 행 0~7열을 저장
// y에 모든 행 8열을 저장
x = df.iloc[:,0:8]
y = df.iloc[:,8]

model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu', name='Dense_1'))
model.add(Dense(8, activation='relu', name='Dense_2'))
model.add(Dense(1, activation='sigmoid', name='Dense_3'))
model.summary()

// 예측 모델 컴파일
model.compile(loss='binary_crossentropy', optimizer='adam',
              metrics=['accuracy'])
// 예측 모델 실행
history = model.fit(x, y, epochs=100, batch_size=5)

Chapter12. 다중 분류 문제 해결하기

1. 다중분류의 의미

> 이항분류가 둘 중에 하나를 고르는 분류 문제라면, 다중분류는 여러 개의 답 중 하나를 고르는 분류 문제임

​

2. 상관도 그래프

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('./data/iris3.csv')
sns.pairplot(df, hue='species')
plt.show()

> 품종(species)에 따른 상관도 그래프

3. 원-핫 인코딩

> 이는 문자열 데이터를 0과 1로만 이루어진 형태로 바꿔주는 과정을 말함

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv('./data/iris3.csv')
x = df.iloc[:,0:4]
y = df.iloc[:,4] # 문자열로 이루어진 상태
y = pd.get_dummies(y) # 원-핫 인코딩 처리
print(y[0:5]) # 결과확인

4. 소프트맥스

> 소프트맥스 함수는 예측 확률을 0과 1 사이의 값으로 나타내 주는 역할을 함

​5. 아이리스 품종 예측 모델

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 아이리스 데이터
df = pd.read_csv('./data/iris3.csv')

# 속성을 x, 클래스를 y
x = df.iloc[:,0:4]
y = df.iloc[:,4]

# 원-핫 인코딩
y = pd.get_dummies(y)

# 모델 설정
model = Sequential()
model.add(Dense(12, input_dim=4, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(3, activation='softmax')) // 출력층 > 소프트 맥스 함수
model.summary()

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

# 모델 실행
history = model.fit(x, y, epochs=30, batch_size=5)


Chapter13. 모델 성능 검증하기

1. 데이터 확인 및 예측 실행

> 전과 같은 모델 생성과정임

import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 데이터 준비
df = pd.read_csv('./data/sonar3.csv', header=None)
x = df.iloc[:, 0:60]
y = df.iloc[:, 60]

# 모델 설정
model = Sequential()
model.add(Dense(24, input_dim=60, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

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

# 모델 실행
history = model.fit(x, y, epochs=200, batch_size=10)

> 정확도는 100이 나오는 모습

2. 과적합

> 과적합이란 학습 데이터 안에서는 예측 정확도가 높게 나오지만, 새로운 데이터를 적용했을 때 잘 맞지 않는 경우를 말함

> 과적합의 발생 문제는 주어진 샘플에만 최적화되어 있어, 다른 데이터에 대한 예측이 제대로 되지 않는 것이라 주어진 샘플을 학습, 테스트용으로 나누는 것이 해결 방법이 될 수 있다.

​3. 학습셋과 테스트셋

import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split

# 데이터
df = pd.read_csv('./data/sonar3.csv', header=None)
x = df.iloc[:,0:60]
y = df.iloc[:,60]

# 학습-테스트셋 구분
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3,
                                                    shuffle=True)

# 모델 설정
model = Sequential()
model.add(Dense(24, input_dim=60, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

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

# 모델 실행
history = model.fit(x_train, y_train, epochs=200, batch_size=10)

# 테스트셋 적용
score = model.evaluate(x_test, y_test)
# 정확도 출력
print('Test accuracy: ', score[1])

> 정확도는 99%인데, 테스트셋 정확도는 80%

4. K겹 교차 검증

from numpy.random import shuffle
import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import KFold
from sklearn.metrics import accuracy_score

# 데이터
df = pd.read_csv('./data/sonar3.csv', header=None)
x = df.iloc[:,0:60]
y = df.iloc[:,60]

# K-Fold 교차 검증 학습
k = 5
kfold = KFold(n_splits=k, shuffle=True)
acc_score = []
for train_index, test_index in kfold.split(x):
  x_train, x_test = x.iloc[train_index, :], x.iloc[test_index, :]
  y_train, y_test = y.iloc[train_index], y.iloc[test_index]

  model = Sequential()
  model.add(Dense(24, input_dim=60, activation='relu'))
  model.add(Dense(10, activation='relu'))
  model.add(Dense(1, activation='sigmoid'))
  model.compile(loss='binary_crossentropy', optimizer='adam',
                metrics=['accuracy'])
  history = model.fit(x_train, y_train, epochs=200, batch_size=10,
                      verbose=0)
  accuracy = model.evaluate(x_test, y_test)[1]
  acc_score.append(accuracy)

# k번 실시된 정확도 평균
avg_acc_score = sum(acc_score) / k

# 결과 출력
print('정확도: ', acc_score)
print('정확도 평균: ', avg_acc_score)

> 정확도는 85% 정도


Chapter14. 모델 성능 향상시키기

1. 데이터 확인 및 검증셋

> 검증셋은 최적의 가중치를 찾기 위해 사용됨

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split

# 데이터
df = pd.read_csv('./data/wine.csv', header=None)
x = df.iloc[:,0:12]
y = df.iloc[:,12]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, shuffle=True)

# 모델 설정
model = Sequential()
model.add(Dense(30, input_dim=12, activation='relu'))
model.add(Dense(12, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()

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

# 모델 실행(검증셋 설정)
history = model.fit(x_train, y_train, epochs=50, batch_size=500,
                    validation_split=0.25)

# 테스트 결과
score = model.evaluate(x_test, y_test)
print('Test accuracy: ', score[1])

2. 모델 저장하기

from tensorflow.keras.callbacks import ModelCheckpoint

modelpath = "./data/model/all/{epoch:02d}-{val_accuracy:.4f}.keras"
checkpointer = ModelCheckpoint(filepath=modelpath, verbose=1)

# 모델 실행
history = model.fit(x_train, y_train, epochs=50, batch_size=500,
                    validation_split=0.25, verbose=0, callbacks=[checkpointer])

# 테스트 결과
score = model.evaluate(x_test, y_test)
print('Test accuracy: ', score[1])

> 에포크와 같이 정확도도 같이 기록하여 저장

3. 그래프로 확인

import numpy as np

# 학습
# loss는 실제-예측의 오차, var_loss는 학습 모델 - 검증셋의 오차
history = model.fit(x_train, y_train, epochs=2000, batch_size=500,
                    verbose=0, validation_split=0.25)

# 결과 확인
hist_df = pd.DataFrame(history.history)
hist_df

# 검증셋 오차
y_vloss = hist_df['val_loss']
# 학습셋 오차
y_loss = hist_df['loss']

# x / 검증셋 오차(빨간색) / 학습셋 오차(파란색)
x_len = np.arange(len(y_loss))
plt.plot(x_len, y_vloss, "o", c="red", markersize=2, label='Testset_loss')
plt.plot(x_len, y_loss, "o", c="blue", markersize=2, label='Trainset_loss')

plt.legend(loc='upper right')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()

'LMS 7 > 개발일지' 카테고리의 다른 글

25.11.10 개발일지 / 딥러닝5  (0) 2025.11.14
25.11.06 개발일지 / 딥러닝3  (0) 2025.11.14
25.11.05 개발일지 딥러닝2(모두의 딥러닝 개정 4판)  (0) 2025.11.14
25.11.03 개발일지 / 딥러닝 1(모두의 딥러닝 개정4판)  (0) 2025.11.14
25.10.30 개발일지 / C++ MFC 프로젝트 5일차  (0) 2025.11.14
'LMS 7/개발일지' 카테고리의 다른 글
  • 25.11.10 개발일지 / 딥러닝5
  • 25.11.06 개발일지 / 딥러닝3
  • 25.11.05 개발일지 딥러닝2(모두의 딥러닝 개정 4판)
  • 25.11.03 개발일지 / 딥러닝 1(모두의 딥러닝 개정4판)
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
25.11.09 개발일지 / 딥러닝4
상단으로

티스토리툴바