과대적합 방지를 위해 가장 널리 사용하는 방법

 

1. 훈련데이터를 더 모은다

 

2. 네트워크의 용량을 감소시킨다(파라미터량(weight의 갯수, 값 줄이기)

 

3. 가중치 규제를 추가한다.(L1,L2규제)

 

4. 드롭아웃을 추가한다.(Dropout(0.3))

 

 

보편적인 머신러닝 프로세스

 

1. 문제정의 및 데이터셋 수집

2. 성공지표선택

3. 평가방법선택

4. 데이터 준비

5. 기본보다 나은 모델 훈련하기

6. 몸집 키우기; 과대적합 모델 구축

7. 모델 규제와 하이퍼파라미터 튜닝

 

 

 

 

컴퓨터 비전 영역에서 사전 훈련된 컨브넷 사용하기(ex: VGG, ResNet 등)

 

사용할 수 있는 두가지 방법

1. 특성 추출(feature extraction)

2. 미세 조정(fine tuning)

 

 

로컬에 있는 데이터 가져오기!

train_generator = image_datagen.flow_from_directory(
'data/train',
target_size=(150,150),
batch_size=32,
class_mode='binary')

test_generator = image_datagen.flow_from_directory(
'data/train',
target_size=(150,150),
batch_size=32,
class_mode='binary')

 

 

DATA Augmentation / 데이터 부풀리기!

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rotation_range=40,
                             width_shift_range=0.2,
                             height_shift_range=0.2,
                             rescale=1./255,
                             shear_range=0.2,
                             zoom_range=0.2,
                             horizontal_flip=True,
                             fill_mode='nearest')

 

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

U-net 링크  (0) 2020.04.27
딥러닝 3일차  (0) 2020.03.18
딥러닝 2일차  (0) 2020.03.17
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16

왜 loss가 떨어지는데 accuracy가 줄어들지 않는가?

scaling

fit, transform

regression의 성능지표

classification의 성능지표

스팸메일 분류 / 세포 비 정상,정상 분류

K-fold Cross Validation

 

모델이 학습되고있는과정을 조금더 객관적으로 보기 위해서.

 

k값은 5나 10(5등분 또는 10등분)으로 나누는 것이 전문가들 사이에서 자주 쓴다.

cross-validiation 장점

1. 효율적인 데이터활용(모두 학습/평가에 활용)

2. 일반적인 정확도 측정 가능

 

단순히 지표값을 보는 것 뿐만 아니라, 데이터에 이상이 없는지도 측정을 할 수 있다.

 

train/test split 장점

1. K-fold cross-validation 보다 빠르다

2. 테스트 방법이 쉽다.

 


로이터 뉴스 분류

 


CNN이 생긴이유

이미지를 이미지로서 학습시킬려고(사람의 눈이 보는것 처럼)

 

이미지를 일열로 바꾸어버리면 공간적으로 무엇을 의미하는지 파악하기가 어렵다.(특징이 다 사라져버린다)

 

그래서 나온 것이 합성곱 신경망

 

이미지 자체의 특징을 잘 학습하기위해 2차원으로 학습하다가 다시 1차원으로(fully connect layer)로 펼쳐주고

마지막에 softmax를 해준다.

 

 

Maxpooling Layer - 이미지 특징만 추출, 이미지 사이즈 축소, 특징 일반화

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

U-net 링크  (0) 2020.04.27
keras ImageDataGenerator  (0) 2020.03.20
딥러닝 2일차  (0) 2020.03.17
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16

DNN 기본 용어

Perceptron

MLP

Weight Initalization

Forward

Backward

Optimization

Cost Function

 

 

vanishing gradient = layer가 깊어질수록 앞쪽의 weight는 sigmoid 함수를 자주 통과하기 때문에 역전파를 할시, 그 값이 희미해진다.?

 

input_dim = feature 개수

출력층의 actvation = Linear, Sigmoid, Softmax 각각 어떤 예측이냐에 따라 결정.

 

Validation Set은 모델이 Train 하는 학습과정에는 관여하지 않는다.

언제 오버피팅이 일어나는지. hyperparameter를 어떤 걸 조정해야할지

모른다.

하지만, Testset은 모델 학습이 끝난 후 확인만 가능한 것이고 학습에는 관여하지 않는다.

 

데이터를 나누는 것의 중요성!!!!!!!!!!!!!!!!!

 

overfitting

 

Dropout

 

LASSO , L1 Regularization

Ridge, L2 Regularization

 

모델을 단순하게 만들수록 복잡도가 줄어들어서

오버피팅을 방지 할 수 있다.

1. 가중치 개수를 줄이자(노드줄이기, 레이어 줄이기)

2. 가중치의 값 자체를 줄인다.(커질수록 복잡도가 커진다.)

(우리가 다루는 딥러닝에서는 차원자체가 높기 때문에)

 

from keras import regularizer

kernel_regularizer, activity_regularizer, bias_regularizer

 

overfitting은 모델의 복잡도와 관계가 있다.

모델은 간단할수록 좋아.

 


 

loss vs accuracy

모델을 학습할때, 실생활에서 쓸때

모델의 성능평가, 인간이 모델을 평가

 

standard scaler

min-max scaler 최솟값0,최댓값1로 맞춰준다.

 

robust scale은 중앙값으로 처리하기 때문에 이상치의 값이 너무 크거나 작은값들의 영향을 받지 않을 수 있다.

 

 


지표

 

regression : MAE, RMSE, MSE, R^2

 

mse는 각각의 상황에 따라 값이 다르게 나오기 때문에 mae를 보는 경우가 많다.(outlier에 영향을 크게 받는다.)

 

R^2가 음수가 나오면 방향성이 반대라서라고 생각하자.

 

분류 성과 지표

 

스팸메일분류:

스팸이 아닌데 스팸이라고 하면 괜찮나? 안괜찮아!! 중요 메일이 스팸함으로 가서 못보면 어떡해!==>precision 높아야된다!!

스팸인데 스팸이 아니라고하면 괜찮나? 그래도 뭐,, 괜찮아 recall은 덜 중요한거 같아

 

코로나 양/음성 판정:

코로나 확진자가 아닌데 확진자라고하면 괜찮나? 그래도 뭐,, 괜찮아 precision은 덜 중요한거같아

코로나 확진자인데 확진자가 아니라고하면 괜찮나? 그럼 큰일나!! 확진자가 활보하고 다니자나 그럼!! recall 겁나 중요해!!

 

 

 

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

keras ImageDataGenerator  (0) 2020.03.20
딥러닝 3일차  (0) 2020.03.18
Keras 모델 생성/학습 - 당뇨병 예측 모델  (0) 2020.03.16
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16
Deep learning 1일차  (0) 2020.03.16

데이터 처리

# 1. Pandas 가져오기
import pandas as pd
# 2. 데이터 불러오기
data = pd.read_csv('diabetes_data.csv')
data.head()

# 데이터 통계치 확인하기

data.describe()

# 3. X/y 나누기
X = data.iloc[:,:-1].values
y = data.iloc[:,-1].values

# values를 붙여서 numpy array형태로 가져온다!!!!! 매우 중요하다!!!! 큰 깨달음
print(X.shape)
print(y.shape)
# 4. Train set, Test set 나누기
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.25, random_state=42)


X_val, X_test, y_val, y_test = train_test_split(X_test,y_test, 
                                                test_size=0.5,
                                                random_state=19)
print(X_train.shape)
print(X_val.shape)
print(X_test.shape)
print(y_train.shape)
print(y_val.shape)
print(y_test.shape)

Keras 모델 만들기

# 5. Keras 패키지 가져오기

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

# 6. MLP 모델 생성

model = Sequential()

model.add(Dense(units=64, input_dim=8, activation='relu'))
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))

model.summary()

# 7. Compile - Optimizer, Loss function 설정
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
# 8. 학습시키기
from keras.callbacks import EarlyStopping, ModelCheckpoint

early_stop = EarlyStopping(patience=20)
batch_size = 32
epochs = 200
history = model.fit(X_train,y_train,
                  batch_size=batch_size,
                  nb_epoch=epochs,
                  validation_data=(X_val,y_val),
                  callbacks=[early_stop],
                  verbose=1
                  )

# 9. 모델 평가하기
train_acc = model.evaluate(X_train,y_train)
test_acc = model.evaluate(X_test,y_test)

print(train_acc)
print(test_acc)

시각화

# 10. 학습 시각화하기
import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])

plt.title('Accuracy')
plt.xlabel('epoch')
plt.ylabel('accuracy')
plt.legend(['train','val'], loc = 'upper left')
plt.show()

# loss 값 그래프 그리기
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])

plt.title('loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train','val'], loc = 'upper left')
plt.show()

# 11. 모델 저장
model_path ='diabet_model.h5'
model.save(model_path)
# 12. 모델 불러오기

from keras.models import load_model

loaded_model = load_model(model_path)
print(loaded_model.summary())

 

'Data Anaylsis > Deep Learning' 카테고리의 다른 글

딥러닝 3일차  (0) 2020.03.18
딥러닝 2일차  (0) 2020.03.17
AND,OR/XOR 문제 keras로 구현!  (0) 2020.03.16
Deep learning 1일차  (0) 2020.03.16
conda 가상환경 설치  (1) 2020.03.13

+ Recent posts