이 글에서는 TensorFlow와 Keras를 사용하여 고양이와 개의 이미지를 구별할 수 있는 이미지 분류기를 만들어 보겠습니다. 이를 위해 TensorFlow 데이터 세트의 cats_vs_dogs 데이터 세트를 사용합니다. 데이터 세트는 25,000개의 고양이와 개 이미지로 구성되어 있으며, 그 중 80%는 훈련에, 10%는 검증에, 10%는 테스트에 사용됩니다.
TensorFlow 데이터세트를 사용하여 데이터세트를 로드하는 것부터 시작합니다. 데이터 세트를 각각 데이터의 80%, 10%, 10%를 차지하는 훈련 세트, 검증 세트, 테스트 세트로 나누고 데이터 세트에 일부 샘플 이미지를 표시하는 함수를 정의합니다.
<code>import tensorflow as tfimport matplotlib.pyplot as pltimport tensorflow_datasets as tfds# 加载数据(train_data, validation_data, test_data), info = tfds.load('cats_vs_dogs', split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'], with_info=True, as_supervised=True)# 获取图像的标签label_names = info.features['label'].names# 定义一个函数来显示一些样本图像plt.figure(figsize=(10, 10))for i, (image, label) in enumerate(train_data.take(9)):ax = plt.subplot(3, 3, i + 1)plt.imshow(image)plt.title(label_names[label])plt.axis('off')</code>
모델을 훈련하기 전에 데이터를 전처리해야 합니다. 이미지는 150x150 픽셀의 균일한 크기로 크기가 조정되고, 픽셀 값은 0과 1 사이에서 정규화되며, 데이터는 일괄 처리되어 일괄적으로 모델에 가져올 수 있습니다.
<code>IMG_SIZE = 150</code>
<code>def format_image(image, label):image = tf.cast(image, tf.float32) / 255.0# Normalize the pixel valuesimage = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))# Resize to the desired sizereturn image, labelbatch_size = 32train_data = train_data.map(format_image).shuffle(1000).batch(batch_size)validation_data = validation_data.map(format_image).batch(batch_size)test_data = test_data.map(format_image).batch(batch_size)</code>
이 기사에서는 사전 훈련된 MobileNet V2 모델을 기본 모델로 사용하고 분류를 위해 전역 평균 풀링 레이어와 압축 레이어를 추가합니다. 이 문서에서는 학습 중에 최상위 레이어 가중치만 업데이트되도록 기본 모델의 가중치를 동결합니다.
<code>base_model = tf.keras.applications.MobileNetV2(input_shape=(IMG_SIZE, IMG_SIZE, 3), include_top=False, weights='imagenet')base_model.trainable = False</code>
<code>global_average_layer = tf.keras.layers.GlobalAveragePooling2D()prediction_layer = tf.keras.layers.Dense(1)model = tf.keras.Sequential([base_model,global_average_layer,prediction_layer])model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=0.0001),loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy'])</code>
이 문서에서는 3주기 동안 모델을 교육하고 각 주기 후에 검증 세트에서 모델을 검증합니다. 학습 후 모델을 저장하여 향후 테스트에 사용할 것입니다.
<code>global_average_layer = tf.keras.layers.GlobalAveragePooling2D()prediction_layer = tf.keras.layers.Dense(1)model = tf.keras.Sequential([base_model,global_average_layer,prediction_layer])model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=0.0001),loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy'])</code>
<code>history = model.fit(train_data,epochs=3,validation_data=validation_data)</code>
Model History
Mobilenet V2 레이어가 어떻게 작동하는지 알고 싶다면 아래 그림은 이 레이어의 결과입니다.
학습이 완료된 후 모델은 테스트 세트에서 평가되어 새 데이터에서 어떻게 작동하는지 확인합니다.
<code>loaded_model = tf.keras.models.load_model('cats_vs_dogs.h5')test_loss, test_accuracy = loaded_model.evaluate(test_data)</code>
<code>print('Test accuracy:', test_accuracy)</code>
마지막으로 이 기사에서는 모델을 사용하여 테스트 세트의 일부 샘플 이미지를 예측하고 결과를 보여줍니다.
<code>for image , _ in test_.take(90) : passpre = loaded_model.predict(image)plt.figure(figsize = (10 , 10))j = Nonefor value in enumerate(pre) : plt.subplot(7,7,value[0]+1)plt.imshow(image[value[0]])plt.xticks([])plt.yticks([])if value[1] > pre.mean() :j = 1color = 'blue' if j == _[value[0]] else 'red'plt.title('dog' , color = color)else : j = 0color = 'blue' if j == _[value[0]] else 'red'plt.title('cat' , color = color)plt.show()</code>
완료! TensorFlow와 Keras를 사용하여 고양이 이미지와 개 이미지를 구별할 수 있는 이미지 분류기를 만들었습니다. 일부 조정과 미세 조정을 통해 이 접근 방식을 다른 이미지 분류 문제에도 적용할 수 있습니다.
위 내용은 TensorFlow와 Keras를 사용하여 고양이와 개 사진에 대한 딥 러닝 분류기를 만듭니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!