본문 바로가기
책&강의 학습/올인원 패키지 :딥러닝&인공지능

[패스트캠퍼스 수강 후기] 인공지능강의 100% 환급 챌린지 11회차 미션

by 소한보 2020. 7. 9.

flow from directory

폴더별로 레이블 담겨있는 것을 바로 불러오는 방법
레이블을 지정해주지 않아도 알아서 레이블을 찾음

 #레이블 구분되어 있는 폴더 경로지정
train_dir = 'dataset/mnist_png/training/'
test_dir = 'dataset/mnist_png/testing/'
 #hyperparameter tunning
num_epochs = 10
batch_size = 32

learning_rate = 0.001

dropout_rate = 0.5

input_shape = (28, 28, 1)
num_classes = 10

 #process
train_datagen = ImageDataGenerator(
    rescale=1./255,
    width_shift_range=0.3,
    zoom_range=0.2,
    horizontal_flip=True
)
 #test에서는 rescale만
test_datagen = ImageDataGenerator(
    rescale=1./255,
)
#generator는 train,test 동일하게 
train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=input_shape[:2],
    batch_size = batch_size,
    color_mode = 'grayscale',
    class_mode = 'categorical'
)
>>> Found 60000 images belonging to 10 classes. #6만장이고 10개의 레이블이 있다는 것을 확인

#클래스 수가 더 많은경우 classes를 추가
validation_generator = test_datagen.flow_from_directory(
    test_dir,
    target_size=input_shape[:2],
    batch_size = batch_size,
    color_mode = 'grayscale',
    class_mode = 'categorical'
)
>>> Found 10000 images belonging to 10 classes.#1만장이고 10개의 레이블이 있다는 것을 확인

model

training

generator를 한것을 넣어주기 위해 fit_generator 사용, 전달인자는 generator
model.fit_generator(
    train_generator,
    steps_per_epoch =len(train_generator), #1pecho당 몇개의 batch를 사용할 것인지
    epochs= num_epochs,
    validation_data= validation_generator,
    validation_steps = len(validation_generator)
)

flow_from dataFrame

cifar같은 경우 폴더별로 분류되어 있지 않아서 위 방법은 사용불가
excel, csv에 담아서 학습하는 방법

우선 pandas만 사용해서 데이터만 불러오기

train_paths = glob('dataset/cifar/train/*.png')
test_paths = glob('dataset/cifar/test/*.png')
len(train_paths),len(test_paths)
>>> (50000, 10000)

replace/split/join/strip

class명을 가져오기 위한 방법

path.replace('cifar','') #대체
>>> 'dataset//train\\0_frog.png'
path.split('/') #분할
>>>['dataset', 'cifar', 'train\\0_frog.png']
'.'.join(['a','b','c']) #병합
>>> 'a.b.c' #공백제거
'        a         '.strip()
>>> 'a'

os

os.path.basename(path) #파일명만
>>> '0_frog.png'
os.path.dirname(path) #폴더명만
>>> 'dataset/cifar/train'

함수화

def get_class_name(path):
    fname = os.path.basename(path)
    class_name = fname.replace('.png','').split('_')[-1]
    return class_name
get_class_name(path)
>>> 'frog'

class수 확인

class_names = []

for path in train_paths:
    cls_name = get_class_name(path)
    class_names.append(cls_name)
#리스트 컴프리헨션
class_names = [get_class_name(path) for path in train_paths]

len(class_names)
>>> 50000

np.unique(class_names)
>>> array(['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog',
       'horse', 'ship', 'truck'], dtype='<U10')
 #시각화 
uniques =np.unique(class_names,return_counts = True) 
plt.bar(uniques[0],uniques[1])
plt.xticks(rotation = 45)

딥러닝/인공지능 올인원 패키지 Online

댓글