딥러닝 os import 케글

Wald Eisen·2023년 12월 20일

!pip install kaggle

from google.colab import files
files.upload()

!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json

!kaggle competitions download -c dogs-vs-cats

!unzip dogs-vs-cats.zip
!unzip train.zip

import os
import shutil
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

데이터 폴더 경로 설정

data_dir = "/content"
train_dir = os.path.join(data_dir, "train")

cat, dog 폴더 생성

cat_dir = os.path.join(data_dir, "cat")
dog_dir = os.path.join(data_dir, "dog")
os.makedirs(cat_dir, exist_ok=True)
os.makedirs(dog_dir, exist_ok=True)

파일 분류 (예시: cat이 들어가는 파일은 cat 폴더로, dog가 들어가는 파일은 dog 폴더로)

for filename in os.listdir(train_dir):
if "cat" in filename:
shutil.move(os.path.join(train_dir, filename), os.path.join(cat_dir, filename))
elif "dog" in filename:
shutil.move(os.path.join(train_dir, filename), os.path.join(dog_dir, filename))

이미지 데이터 전처리

train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.2 # 20%를 검증 데이터로 사용
)

훈련 데이터 생성

train_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary', # 이진 분류 (cat, dog)
subset='training' # 훈련 데이터
)

검증 데이터 생성

validation_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary', # 이진 분류 (cat, dog)
subset='validation' # 검증 데이터
)

모델 구축

model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(2, 2),
Dropout(0.1),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2, 2),
Dropout(0.1),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2, 2),
Dropout(0.1),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.1),
Dense(1, activation='sigmoid')
])
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

이미지 데이터 전처리

train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.2 # 20%를 검증 데이터로 사용
)

훈련 데이터 생성

train_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary', # 이진 분류 (cat, dog)
subset='training' # 훈련 데이터
)

검증 데이터 생성

validation_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary', # 이진 분류 (cat, dog)
subset='validation' # 검증 데이터
)

모델 구축

model = Sequential([
Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),
MaxPooling2D(2, 2),
Dropout(0.1),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2, 2),
Dropout(0.1),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2, 2),
Dropout(0.1),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.1),
Dense(1, activation='sigmoid')
])
model.summary()
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

모델 훈련

model.fit(train_generator, epochs=10)

테스트 데이터 평가

test_generator = train_datagen.flow_from_directory(
data_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)

loss, accuracy = model.evaluate(test_generator)
print(f"Test accuracy: {accuracy}")

0개의 댓글