1. 데이터 수집
data 폴더내에 정상조직 사진 3750장, 암 조직 사진 625장이 있음.
2. 데이터 전처리
<주요 코드>
1) 파일 읽어오기
data = []
classes = os.listdir("data")
for i, cls in enumerate(classes):
print("Opening " + cls + "/")
for el in os.listdir("data/" + cls):
img = Image.open("data/" + cls + "/" + el)
data.append((np.asarray(img), i))
img.close()
2) 훈련 데이터, 테스트 데이터 분리하기 8:2
random.shuffle(data)
cnt = len(data) - 1000
for i in range(cnt):
if i < 0.8*cnt:
self.train_X.append(data[i][0])
self.train_Y.append(data[i][1])
else:
self.test_X.append(data[i][0])
self.test_Y.append(data[i][1])
self.train_X = np.asarray(self.train_X) / 255.0
self.train_Y = np.asarray(self.train_Y)
self.test_X = np.asarray(self.test_X) / 255.0
self.test_Y = np.asarray(self.test_Y)
3. 신경망 구축
# 신경망 생성 코드
model = keras.Sequential([
keras.layers.Conv2D(16, (3, 3), activation="relu"),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(32, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Conv2D(64, (3, 3), activation='relu'),
keras.layers.MaxPooling2D((2, 2)),
keras.layers.Flatten(), # 벡터화 해야함.
keras.layers.Dense(512,activation = 'relu'),
keras.layers.Dropout(rate = 0.5), # 오버피팅 현상을 막기위해 추가
keras.layers.Dense(1)
])
model.compile(optimizer = 'adam', metrics = ['accuracy'],
loss = 'binary_crossentropy')
# 인공신경망 학습
print("\n\n************ TRAINING START ************ ")
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(dr.train_X, dr.train_Y, epochs=EPOCHS,
validation_data=(dr.test_X, dr.test_Y),
callbacks=[early_stop])
4. 인공지능 성능 확인
모델 정확도 86%
Epoch 9/10
2700/2700 [==============================] - 91s 34ms/sample - loss: 0.8800 - accuracy: 0.8174 - val_loss: 0.6439 - val_accuracy: 0.8607
Epoch 10/10
2700/2700 [==============================] - 91s 34ms/sample - loss: 0.5129 - accuracy: 0.8496 - val_loss: 0.2845 - val_accuracy: 0.8607
손실율과 정확도 그래프로 확인해보기
오버피팅이 살짝 있는 것으로 확인됨!
'AI' 카테고리의 다른 글
[자연어처리] 자연어 처리 기초 이론 (0) | 2021.12.27 |
---|---|
[AI] 대학교 합격 예측 프로그램 (0) | 2021.12.27 |
[Python] 스팸 문자 분류 프로젝트 LSTM 사용해보기 (0) | 2021.12.26 |
[Python] 자연어 처리 기초, 스팸 문자 분류 프로젝트 (0) | 2021.12.24 |
[Python] 이미지 분류 1 - Minist 손글씨 인식 (0) | 2021.12.22 |