기존 위치인 회색에서 벗어나면 인식을 못하는 문제가 있다.
이를 해결하기 위해 특징을 추출하여 분석하는 CNN이 나왔다.
Feature Extractor : 특징 분류
Classifier : 판단하는 부분(MLP)
보통 첫번째 층에서는 자주보이는 선, 광원 같은 걸 추출
두번째 층은 구체적인 특징들이 자주 보이는 것 위주로 추출
마지막 층은 종합적으로 판단
from tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten
cnn_model = Sequential() # 모델의 뼈대
cnn_model.add(InputLayer(input_shape=(224,224,3)))
cnn_model.add(Conv2D(filters=128,
kernel_size=(3,3),
activation="relu"))
cnn_model.add(MaxPool2D())
cnn_model.add(Conv2D(filters=256,
kernel_size=(3,3),
activation="relu"))
cnn_model.add(MaxPool2D())
cnn_model.add(Conv2D(filters=64,
kernel_size=(3,3),
activation="relu"))
cnn_model.add(MaxPool2D())
# 분류기 (MLP)
cnn_model.add(Flatten())
cnn_model.add(Dense(units=64,activation='sigmoid'))
cnn_model.add(Dense(units=32,activation='sigmoid'))
cnn_model.add(Dense(units=2,activation='softmax'))
실행 시
cnn_model.compile(loss="sparse_categorical_crossentropy",#3개 이상일 경우
optimizer="Adam",
metrics=['accuracy'])
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2, random_state=425)
cnn_model.fit(X_train,y_train,epochs=50)
pre = cnn_model.predict(X_test)
from sklearn.metrics import classification_report
print(classification_report(y_test, np.argmax(pre,axis=1)))
실행 시
사용되는 함수
0~1사이의 값이 반환
예시
출력 값은 0~1 사이가 나온다