train_test_split()
으로 데이터셋을 나눌 수도 있지만 pd.sample()
로도 나눌 수 있음🤔출력층에 activation function을 지정하지 않았을 때 회귀 혹은 분류 모델이라는 것을 모델이 어떻게 알 수 있을까?
🤔멀티클래스 예측값이 나왔을 때 가장 큰 인덱스를 반환하는 넘파이 메서드는?
np.argmax()
를 통해 가장 큰 값의 인덱스를 반환받아 해당 클래스의 답으로 사용함🤔softmax 와 sigmoid 의 차이는 무엇일까?
출력층, compile 의 loss 를 보고 분류인지 회귀인지, 이진분류인지, 멀티클래스인지 판단해 볼 수 있도록 계속 연습해보기!
💡optimizer 는 문자열로 지정해서 사용할 수도 있지만 직접 메서드를 불러와서 사용하면 학습율을 조정할 수 있음
🤔learning_rate 는 무엇일까?
🤔DNN 을 사용할 때의 입력과 CNN을 사용할 때 입력의 차이?
🤔DNN을 이미지 데이터에 사용했을 때 어떤 단점이 있을까?
1) flatten() 으로 1차원 벡터 형태로 주입을 해야 하기 때문에 인접 공간에 대한 정보를 잃어버리게 됨.
2) 1차원 형태로 주입을 해주게 되면 입력값이 커서 계산이 오래 걸림.
3) CNN의 Conv과 Pooling 연산을 하게 되면 데이터의 공간적인 특징을 학습하여 어떤 패턴이 있는지를 알게 됨
4) CNN의 Pooling 을 통해 데이터를 압축하면 데이터의 용량이 줄어들며, 추상화를 하기 때문에 너무 자세히 학습하지 않게 되며 오버피팅을 방지해 줌.
💡핵심 키워드 : Conv, Pooling(Max) + DNN
(image_height, image_width, color_channels) 에서 color_channels 은 0, 1, 2 번째 값을 가져올 수 있음(RGB)
🤔CNN은 어떻게 피처를 자동으로 추출할까?
🤔패딩(Padding)의 특징? 왜 사용할까?
CNN의 작동 원리 이해를 돕기 위한 사이트
https://poloclub.github.io/cnn-explainer/
데이터의 특징을 추출하는 과정으로 필터를 사용하여 각 영역의 인접 데이터를 조사해 특징을 파악하여 한 장으로 도출함
이미지의 특정 부분을 추상화하여 특정 층으로 표현함
구조는 필터(Filter)와 활성화함수(Activation Function)으로 구성됨
📚Tensorflow API
tf.keras.layers.Conv2D(
filters, kernel_size, strides=(1, 1), padding='valid', input_shape=(28, 28, 1),
data_format=None, dilation_rate=(1, 1), groups=1, activation=None,
use_bias=True, kernel_initializer='glorot_uniform',
bias_initializer='zeros', kernel_regularizer=None,
bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None, **kwargs)
풀링 : 합성곱층에서 받은 최종 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조함
이미지 크기를 줄여 계산을 효율적으로 하고 데이터를 압축하는 효과가 있기 때문에 오버피팅을 방지해 주기도 함. 이미지를 추상화 해주기 때문에 너무 자세히 학습하지 않도록해서 오버피팅이 방지되게 됨
풀링 레이어를 처리하는 방법: Max Pooling(최대값)과 Average Pooling(평균값), Min Pooling(최소값)
컬러 이미지에서는 MaxPooling 을 가장 많이 사용하는 편
풀링층과 합성곱층을 비교해보면
📚Tensorflow API
tf.keras.layers.MaxPool2D(
pool_size=(2, 2), strides=None, padding='valid', data_format=None,
**kwargs)
🤔필터와 커널의 차이?
필터 : 이미지에서 특징을 분리해 내는 기능
커널 : 필터를 이미지에 통과해서 합성곱 연산을 할 때 사용되는 필터의 사이즈