본문 바로가기

컴퓨터/TensorFlow

tensorflow 이미지 분류 모델

2023.12.21 - [컴퓨터/TensorFlow] - tensorflow 이미지 데이터셋 만들기

 

tensorflow 이미지 데이터셋 만들기

1. 이미지 수집 위와 같이 그림판으로 'a' 를 그린 이미지 10개, 'b' 를 그린 이미지 5개를 각각 다른 이름으로 한 디렉토리에 저장한다. ./ a1.jpg a2.jpg a3.jpg a4.jpg a5.jpg b1.jpg b2.jpg b3.jpg b4.jpg b5.jpg 2. 코

bloghelloworld.tistory.com


import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

def load_and_preprocess_image(image_path):
    # 이미지 파일을 불러오고 전처리하는 함수
    image = tf.io.read_file(image_path)  # 이미지 파일 읽기
    image = tf.image.decode_jpeg(image, channels=1)  # 이미지를 흑백으로 디코딩
    image = tf.image.resize(image, [28, 28])  # 이미지 크기를 28x28로 조절
    image /= 255.0  # 픽셀 값을 0~1 범위로 정규화
    return image

# npz 파일 로드
data = np.load('datasets.npz')  # 저장된 npz 파일에서 데이터 로드

# 데이터를 키에 맞춰 불러오기
train_images = data['train_images']  # 훈련 이미지
train_labels = data['train_labels']  # 훈련 라벨
test_images = data['test_images']    # 테스트 이미지
test_labels = data['test_labels']    # 테스트 라벨

# 데이터셋을 TensorFlow 데이터셋으로 변환
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels)).shuffle(buffer_size=1000).batch(32)  # 훈련 데이터셋
test_dataset = tf.data.Dataset.from_tensor_slices((test_images, test_labels)).batch(32)  # 테스트 데이터셋

# 클래스 이름 정의
class_names = ['a', 'b']  # 클래스 a와 b

# 모델 정의
model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),  # 입력 이미지를 1차원 배열로 변환
    tf.keras.layers.Dense(4, activation='relu'),    # 4개의 유닛을 가진 Dense 층
    tf.keras.layers.Dense(2)                        # 최종 출력을 위한 2개의 유닛을 가진 Dense 층
])

# 모델 컴파일
model.compile(optimizer='adam',  # 옵티마이저로 'adam' 사용
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),  # 손실 함수
              metrics=['accuracy'])  # 평가 지표로 'accuracy' 사용

# 모델 학습
model.fit(train_dataset, epochs=3)  # 모델을 훈련 데이터셋으로 3번 에포크 동안 학습

# 모델 평가
test_loss, test_acc = model.evaluate(test_dataset, verbose=2)  # 테스트 데이터셋으로 모델 평가
print(f"\nTest accuracy: {test_acc}")  # 테스트 정확도 출력

# 새 이미지 불러오기 및 전처리
image = load_and_preprocess_image('image.jpg')  # 새 이미지 불러오기 및 전처리

# 이미지를 배치 형태로 만듦
image_batch = tf.expand_dims(image, 0)  # 배치 차원 추가

# 모델을 사용하여 예측
predictions = model.predict(image_batch)  # 이미지에 대한 예측 수행

# 예측 결과 해석
predicted_label = class_names[np.argmax(predictions[0])]  # 가장 높은 확률을 가진 클래스 선택
print(f"이 이미지는 '{predicted_label}' 클래스로 예측됩니다.")  # 예측된 클래스 출력

'컴퓨터 > TensorFlow' 카테고리의 다른 글

tensorflow 이미지 데이터셋 만들기  (0) 2023.12.21