본문 바로가기
DataScience/MachineLearning

딥러닝 텐서플로우 Flatten()을 사용하지않는, validation_data 파라미터 split 과의 차이, Dropout이란

by leopard4 2022. 12. 29.

1. Flatten() 라이브러리 없이 이미지 평탄화 하는방법

예시)

X_train.shape # 3차원
(60000, 28, 28)

 

X_train = X_train.reshape(60000, 784) # 평탄화 // 2차원

마찬가지로 X_test도 reshape을 이용한다 .

 

모델링 예시)

def build_model() : 
  model = Sequential()
  model.add( Dense(128, 'relu', input_shape=(784, ) ) ) 
  model.add( Dropout(0.2) ) # 학습할때 20프로의 선을 없애라는뜻 (이부분만)
  model.add( Dense(64, 'relu'))
  model.add( Dense(10, 'softmax'))                                              
  model.compile('adam', 'sparse_categorical_crossentropy', ['accuracy'])        
  return model

Flatten()을 사용하면 input_shape이 자동으로 설정되지만,

여긴 수동으로 하는것이기 때문에 열의갯수 784를 적어준다 (인풋노드(뉴런)가 784개란 얘기)

 

2.  코드의 중간쯤 보면 Dropout(0.2) 을 볼 수가있는데 

이것의 의미는 

히든레이어1  model.add( Dense(128'relu', input_shape=(784, ) ) ) 에서
히든레이어2 model.add( Dense(64'relu')) 사이에
학습하는 가중치(W)의 갯수를 0.2 
즉 20퍼만큼 랜덤으로 없애라는 의미와 같다 
그렇게 하는 이유는 학습이 더 잘되는 연구 결과가 있었기 때문. 

 

3. 에포크시마다 테스트를 하는, 밸리데이션 데이터를 처리하는 방법 중 validation_data 파라미터 사용법

밸리데이션 데이터란. 

에포크시마다 테스트를 하기 위한 데이터라고 보면된다 .

밸리데이션 데이터셋이 따로 준비가 되있다면 

validation_data = 데이터셋 을 하면되는것이고 

준비가 되지않았다면 아래와같이 test 데이터를 이용하거나.

예시,

epoch_history = model.fit(X_train, y_train, epochs=10, validation_data = (X_test, y_test ) )

또는

validation_split = 을해서 

X_train, y_train 과 같은 학습용 데이터를 나눠서 사용하면된다.

 

스플릿 예시(0.2 == 20%)

epoch_history = model.fit(X_train,y_train, epochs=30, validation_split = 0.2)