1.초급자용 빠른 시작 5/1

 

데이터를 불러와서 정규화를 해준다.

 

모델의 계층을 구성한다.

 

모델의 optimizer, loss func, metric을 정해주며 컴파일한다.

 

모델을 학습시킨다.

 

모델을 평가한다.

 

 

 

2. 첫 번째 신경망 훈련하기: 기초적인 분류 문제 5/2

 

1) fashion mnist를 사용해보자.

 

2) 데이터셋을 받고 이미지가 레이블에 매핑되어 있지않으므로 별도의 변수를 만든다.

 

3) 데이터를 탐색해보자. 데이터셋의 구조를 확인해본다.

shape와 len을 이용하여 구조를 알 수 있다.

 

4) 데이터 전처리를 해보자.

첫 번째 이미지를 보고 픽셀 값의 범위가 0 - 255인 것을 알 수 있다.

이 값을 0 - 1로 조정하자.

 

마지막으로, 이미지와 클래스 이름을 출력하고 데이터 포맷이 올바른지 확인한다.

- figure함수로 figure객체를 만들고 subplot을 통해 여러 개의 그래프를 그리면 된다.

ex. subplot(nrows, ncols, index)

 

5) 모델 구성

 

층들의 파라메터(가중치)는 훈련하는 동안 학습됩니다.

처음 flatten layer은 이미지에 있는 픽셀의 행을 일렬로 늘립니다. 이때는 파라메터가 없고 데이터를 변환하기만 합니다.

 

dense층은 densely-connected, fully-connected 층이라고 부릅니다.

 

6) 모델 컴파일

loss, optimizer, metrics를 추가한다.

 

7) 훈련

model.fit(train_images, train_labels, epochs = 5

 

8) 평가

model.evaluate(test_images, test_labels, verbose = 2)

 

모델을 완성하였으니 학습된 이미지를 사용하여 예측을 할 수 있다.

 

9) 모델 활용하기.

model.predict메소드를 활용하면 predictions에는 각 품목에 해당하는 예측 값이 출력된다.

np.argmx(predictions[0])과 test_labels[0]을 비교했을 때, 결과가 같게 나왔습니다.

 

plot_images, plot_value_array를 통해 결과를 시각적으로 확인해보자.

 

마지막으로 실습 확인하기!

 

 

3. CSV 데이터 로드 5/4

 

 

[1. csv 데이터를 사용하는 방법을 알아보자.]

 

데이터를 가져와서 학습에 적합하도록 전처리를 해보자.

 

추가로 공부하고 싶다면 아래를 참고하자.

For a tutorial that focuses on the preprocessing aspect see the preprocessing layers guide and tutorial.

 

np.set_printoptions은 출력옵션을 변경해준다. 예를 들어서, 소수점을 3자리로 반올림해준다.

 

1) 필요한 pandas, numpy, tensorflow, keras의 layers, layers.experimental의 preprocessing

라이브러리를 가져오자.

 

2) csv데이터를 모델에 학습하기 위해서는 데이터를 판다스의 데이터프레임이나 넘파이어레이로 메모리에 적재해야한다.

여기서 예제로 사용한 데이터는 abalone dataset.로 특징을 보고 전복의 나이를 예측할 수 있는 데이터이다.

 

성별, 길이, 지름, 높이, 무게, 껍질 무게 등등이 특징으로 주어져있다.

팁: nominal은 데이터를 분류할 수 있을 때 사용된다.

 

3) 여기서는 dataframe을 numpy array로 만들었는데 이유는 정확히 모르겠다.

 

4) regression model을 만들어보자.

Dense layer만을 이용해서 모델을 만들었다.

흐음..? dense layer은 output = activation(dot(input, weight) + bias)로 구현되어있다. 즉 regression model만을 위한 것으로 위의 튜토리얼에서의 relu, softmax는 activation의 역할을 더해주는 것이다. (여기서 weight는 weight matrix를 의미)

www.tensorflow.org/api_docs/python/tf/keras/layers/Dense

 

5) training 과정은 똑같다.

 

 

[2. 자, 이제 기본적인 csv파일을 대처하는 방법을 배웠으니, numeric columns에 normalization과정에 대해 알아보자.]

 

1) experimental.preprocessing layer가 정규화에 매우 도움이 된다.

-> mean, variance를 각 열마다 구해줘서 정규화에 도움이 된다.

예를 들어서, 이미지의 경우 0 - 255의 픽셀범위를 갖는데 정규화를 통해서 0 - 1로 축소시킬 수 있다.

또 다른 좋은 예시는 input data의 범위가 2가지 종류로 들어왔을때 0 - 1과 999 - 90000가 들어왔다고 생각해보자. 한쪽은 경사가 가파르고 한쪽은 완만하여 learning rate의 차이가 있을때 문제가 발생할 수 있다.

자세한 내용은 오른쪽의 링크에서 확인해보자. 89douner.tistory.com/42 -> 질문 댓글 확인해보기.

 

normalize = preprocessing.Normalization()

Normalization.adapt()를 training set에만 사용하고 test, validation에는 사용해서는 안된다

왜? www.inflearn.com/questions/19038

->

문구는 테스트셋에 정규화를 하지 말라는 말이 아니고 adapt() 함수에는 training 데이터만 넣으라는 이야기예요. adapt()함수는 Scikit learn 전처리 클래스의 fit() 함수라고 생각하시면 되요. fit() 학습셋으로만하고 정규화는 tranform()으로 학습셋 시험셋 모두 시키는 거죠

adapt()는 실제 정규화를 하는 것은 아니고 나중에 레이어가 호출될 때 정규화가 이루어집니다.

->

학습데이터 세트에서 변환을 위한 기반 설정(예를 들어 학습 데이터 세트의 최대값/최소값등)을 먼저 fit()을 통해서 설정한 뒤에 이를 기반으로 학습 데이터의 transform()을 수행하되 학습 데이터에서 설정된 변환을 위한 기반 설정을 그대로 테스트 데이터에도 적용하기 위해서입니다.

즉 학습 데이터 세트로 fit() 된 Scaler를 이용하여 테스트 데이터를 변환할 경우에는  테스트 데이터에서 다시 fit()하지 않고 반드시 그대로 이 Scaler를 이용하여 transform()을 수행해야 합니다.

 

2) 어쨋든 loss가 6.xx -> 4.xx로 성능이 개선되었다.

 

[3. mixed data types를 처리해보자.]

 

타이타닉 문제는 배에 탄 사람 중 누가 살아남을 지 예측하는 문제다.

 

1) dataframe으로 받을 수 있지만 tensorflow model에는 적절하지 않다.

 

2) x_data, y_data로 바꿔주기 위해서 dataframe의 pop메소드를 사용한다.

 

3) 여기가 중요한 부분이다. 아까와 달리 데이터 타입 그리고 range가 mix되어 있어서 서로 다른 데이터 타입을 단순하게 numpy로 바꿔서 model에 넘겨줄 수 없다. 즉, 타입별로 따로 따로 사용할 수 있어야 한다.

 

해결방법

- 미리 데이터 전처리하기 ( categorical -> numerical ...)

- preprocessing logic을 갖는 모델을 구현하기

 

**symbolic tensor, eager tensor란 무엇인가

->특별한 값이 없는 변수같은 텐서를 심볼릭 텐서라고 한다.

->예를 들어서, model = models.Sequential()라고 하면 symbolic model이라고 한다.

->우리가 흔히 아는 값이 있는 것들을 eager이라고 한다.

stackoverflow.com/questions/59707065/what-are-symbolic-tensors-in-tensorflow-and-keras

 

4) preprocessing logic을 갖는 모델을 구현하기 위해서 위의 내용을 학습하였다.

이것을 하기 위해서 우리는 symbolic keras.Input 객체에 대해 알아보았다. 각기 다른 타입의 컬럼과 매칭시켜보자.

 

x = tf.keras.Input(shape = (32,)) 이런 식으로 모델에 들어갈 데이터를 상수가 아니라 변수로 담을 수 있다.

model(x, y)

 

이를 사용하면 data를 type끼리 구분하여 처리할 수 있다.

categorical data, numerical data를 처리하는 방법이 다르기때문에 이렇게 전처리 과정이 필요하다.

 

**dataframe.items() 는 column name과 그 column의 내용을 Series로 반환한다.

 

 

먼저, numerical을 모두 이어붙여서 normalize layer에 전달한다.

 

다음은 string input을 처리하는데 preprocessing.StringLookup 메소드를 사용하여 string과 integer indices를 매핑한다.

그리고 preprocessing.categoryencoding을 사용하여 one-hot-vector을 만들어준다.

(추후에 아래의 링크를 통해서 layers.Embedding에 대해 학습하자)

 preprocessing layers guide and tutorial 

(추가. 위와 같은 것을 전처리 레이어라고 한다.

We also have a categorical feature encoded as a string: thal. We will first create an index of all possible features using the StringLookup() layer, then we will one-hot encode the output indices using a CategoryEncoding() layer. )

 

위의 과정을 통해서 완성된 모델을 plot_model을 통해서 시각화하여 확인할 수 있다.

rankdir을 수직,수평을 결정하고 dpi는 인치당 도트수, show_shapes는 정보를 보여줄지 결정하는 것이다.

 

데이터셋을 하나의 텐서로 바꿔야하는지 턴서들의 딕셔너리로 바꿔야하는지 알지 못하기때문에 우리가 해줘야한다.

 

 

 

[4. model의 이미 만들어진 data의 메소드에 의존하였었다. 이번에는 tf.data에 대해서 알아보자.]

이전에는 모델에 있는 data shuffling, batching을 사용하였었다. 입력 데이터에 대해서 더 많은 control이 필요하다면 스스로 제어하고 싶다면 tf.data를 사용해보자.

 

 

 

 

[추가부록. 한국어자료]

 

www.tensorflow.org/tutorials/load_data/csv?hl=ko

 

 

**데이터 처리 정리.

0.우선 해야할 것.

1.결측치 처리

2.Mixed data type 처리

3.데이터 scale 맞추기

+ Recent posts