라이브러리 설치
# pip install opencv-python
# pip install tensorflow-datasets==4.6.0
# 'cats_vs_dogs'는 tfds 버전 4.6.0 에서 실행됨
# tfds 최신 버전 에러 해결
# pip install tfds-nightly
import cv2
import matplotlib.pyplot as plt
import tensorflow_datasets as tfds
import tensorflow as tf
오류 발생시
# URL 변경 오류 시 다시 세팅
setattr(tfds.image_classification.cats_vs_dogs, '_URL',"https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_5340.zip")
Train set 분리
data_train, ds_info = tfds.load('cats_vs_dogs', split=[tfds.Split.TRAIN], with_info=True)
# .take() 는 n개의 샘플이미지를 numpy 배열로 구성된 목록 'image'에 저장
# one['image'].numpy()는 각 요소의 'image'특성에 접근하고 이를 numpy 배열로 변환
images = [one['image'].numpy() for one in data_train[0].take(30)]
len(images)
# 데이터 시각화
plt.imshow(images[12])
plt.axis('off')
Resnet50 모델 활용
resnet50_pre = tf.keras.applications.resnet.ResNet50(weights='imagenet', input_shape=(224, 224, 3))
resnet50_pre.summary()
- tf.keras.applications.resnet.ResNet50 모델의 weights 매개변수에는 다음 세 가지 종류의 값이 할당될 수 있습니다
- 'imagenet': ImageNet 데이터셋에서 사전 학습된 가중치를 사용합니다. 이 옵션을 선택하면 모델이 ImageNet 데이터셋에서 사전 학습된 가중치로 초기화됩니다.
- None (기본값): 가중치를 무작위로 초기화합니다. 이 경우 모델은 사전 학습된 가중치를 사용하지 않고 무작위로 초기화됩니다.
- 미리 학습된 가중치 파일의 경로: 사용자가 정의한 다른 가중치 파일을 지정할 수 있습니다. 이 경우에는 해당 파일에서 가중치를 로드하여 모델을 초기화합니다.
예측
from tensorflow.keras.applications.imagenet_utils import decode_predictions
def pred_img(img):
plt.imshow(img)
plt.axis('off')
plt.show()
# resnet50
img_resized = cv2.resize(img, (224,224))
pred = resnet50_pre.predict(img_resized.reshape([1, 224,224, 3]))
decoded_pred = decode_predictions(pred)
for i, instance in enumerate(decoded_pred[0]):
print('{}위: {} ({:.2f}%)'.format(i+1, instance[1], instance[2] * 100))
pred_img(images[3])
'Python > MachineLearning' 카테고리의 다른 글
[NLP][ML] 문자열 기반 카테고리 분류 예측 모델 (0) | 2025.01.22 |
---|---|
[Scikit-Learn] K-최근접 이웃(K-nearest Neightbors, KNN) 알고리즘_분류 (0) | 2022.08.03 |
[Tensorflow] 'contib()' 오류 해결 (0) | 2022.06.02 |