- 딥러닝 모델을 구축할 때 이전에 오픈된 모델을 불러와서 사용할 수도 있다.
- 먼저 tensorflow_datasets에서 고양이와 강아지 사진을 불러왔다.
- 그리고 as_supervised 입력값에 True를 줌으로써 데이터와 라벨을 하나로 묵었다.
- 하나의 데이터를 뽑아서 출력해보니 정상적으로 데이터를 불러왔다.
- 이미지 사이즈는 160×160으로 설정하고,
- 스케일 조정하는 함수를 만들어서 float형태로 바꾸고, 데이터의 스케일을 -1 ~ 1까지 만들었다.
- 그리고 train데이터에는 batch 사이즈 및 shuffle를 주고, test 및 validation데이터에는 batch_size만 설정했다.
- 하나의 데이터를 뽑아 확인해보니 하나의 세트당 32개의 사진이 제대로 들어가있다.
- 그리고 tensorflow에서 MobileNetV2 모델을 불러오고, 마지막 출력 레이어는 불러오지 않았다.
- 그리고 weights값은 imagenet으로 불러왔다.
- 마지막 출력으로 1280의 특징을 출력하는 layer가 있는 것을 확인하고, 기존의 모델에 대한 학습 여부를 False로 줬다.
- 이제 마지막 출력 Layer로 1280의 특징을 가지는 하나의 데이터를 뽑도록 층을 만들고, 1280개의 특징에서 하나의 출력값이 나오도록 Dense Layer를 추가했다.
- 이제 불러온 모델과 마지막 GlovalAveragePooling2D 및 최종 출력 Layer 3개의 층을 모델로 구성했다.
- learning_rate는 0.001로 주고, 최적화는 RMS로, 성능은 accuracy로 주고 모델의 최종 요약을 확인했다.
- 기존의 모델에 대한 파라미터는 다 교육 여부를 False로 줬고, 마지막 넣은 1280 및 1에 대한 layer만이 train 여부가 가능하다.
- 이제 모델을 통해 데이터를 학습하고, 성능을 확인해보니 98%의 정확도를 보인다.
- 이번에는 기존 모델에서 154개의 Layer가 존재하는데, 100개층 이하에서는 교육을 막고, 101층 Layer부터 교육이 가능하도록 설정한 후 다시 교육 및 성능을 테스트해봤다.
- summary()로 확인해본 결과 Trainabel params가 확실히 높게 나왔다.
- 다시 성능을 확인해보니 뭐...크게 변한 건 없다.
- 이번에는 불러온 모델에 추가적인 Layer를 넣고 성능을 테스트해봤다.
- 먼저 mobilenet_v2 모델을 불러와서 summary를 확인해봤다.
- 그리고 하나의 사진을 불러와 이미지의 사이즈를 바꿔주고 0~1로 스케일을 바꾼 후 모델에 예측해보니 653번째 class가 나왔다.
- 이제 해당 class의 값을 확인해보니 정상적으로 군복의 사진이 제대로 예측됐다.
- 이번엔 꽃사진에 대한 예측을 해봤다.
- 먼저 꽃 사진을 불러오고 3670개의 가진이 5개의 class로 불러와졌다.
- 그리고 224∗224∗3의 정상적인 rgb 사진인 것을 확인했다.
- 이제 예측을 진행하고, 하나의 데이터셋에 32개의 사진을 예측하고 라벨값으로 변환했다.
- 사진을 출력하고, 위에 라벨값을 넣어 예측을 비교해보니 틀린 사진이 존재한다.
- 사실...꽃이름을 정확히 몰라서 뭐가 틀린건지 헷갈리기도 하다...
- 이번에는 기존의 모델에 꽃 class 5개를 softmax 활성화 함수를 사용해서 출력하는 Dense를 넣고 모델을 구축했다.
- 모델에 compile을 진행하고, loss와 accuracy를 list형태로 appen하는 클래스를 만든 후 callback에 넣고 모델을 교육시켰다.
- epoch가 돌수록 loss값이 떨어지는 것을 시각화해서 확인했다.
- 이번에는 새로 구축한 모델로 사진과 예측값을 시각화했는데, 예측이 맞으면 파랑색, 틀리면 빨간색으로 라벨값을 표시했따.
- 음 눈에 보이는 건 sunflower인데 사람이 봐도 꽃이 있기에 틀렸다고 애매하다.
- 이렇게 불러온 모델을 바로 쓰거나, 미세하게 Layer를 넣음으로써 조정해서 쓸 수도 있다.