!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_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)
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}")