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

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

by 소한보 2020. 7. 10.

Part3-8 flow_from_dataframe

DataFrame으로 만들고 경로 지정

데이터프레임생성

 #Dataframe생성 예시
data_ex = {'a' : [1,2,3], 'b':[10,20,30],'c': [100,200,300]}
df_ex = pd.DataFrame(data_ex)
df_ex
>>> 
a    b    c
0    1    10    100
1    2    20    200
2    3    30    300
 #DataFrame 생성(train)
data={'name': train_paths, 'class': class_names}
train_df = pd.DataFrame(data)
 #DataFrame 생성(test)
test_names = [get_class_name(path) for path in test_paths]
data={'name': test_paths, 'class': test_names}
test_df = pd.DataFrame(data)
출력결과

데이터프레임저장

train_csv_path = 'train_dataset.csv'
test_csv_path = 'test_dataset.csv'
train_df.to_csv(train_csv_path,index=False)
test_df.to_csv(test_csv_path,index=False)
index=False 하는 이유

Part3-9 DataFrame으로 학습시키기

csv파일을 불러와서 DataFrame으로 학습 진행
hyperparameter tunning은 이전과 동일하되
input_shape = (32,32,3) 으로 변경

num_epochs = 10
batch_size = 32

learning_rate = 0.001

dropout_rate = 0.5

input_shape = (32,32,3)
num_classes = 10

Preprocessing

 #csv load
train_df = pd.read_csv('train_dataset.csv')
test_df = pd.read_csv('test_dataset.csv')
 #generator 생성
train_datagen = ImageDataGenerator(
    rescale=1./255,
    width_shift_range=0.3,
    zoom_range=0.2,
    horizontal_flip=True
)
test_datagen = ImageDataGenerator(
    rescale=1./255,
)
 # x_col은 filename, y_col은 class로 생성했다면 따로 지정할 필요 없음
train_generator = train_datagen.flow_from_dataframe(
    train_df,
    x_col = 'name', #input
    y_col = 'class', #label
    target_size = input_shape[:2],
    batch_size = batch_size
)
test_generator = test_datagen.flow_from_dataframe(
    test_df,
    x_col = 'name', #input
    y_col = 'class', #label
    target_size = input_shape[:2],
    batch_size = batch_size
)
각각 5만, 1만개 데이터에 10개의 클래스가 있는것을 확인

model은 이전과 동일한 모델 사용

inputs = layers.Input(input_shape)
net = layers.Conv2D(32, (3, 3), padding='SAME')(inputs)
net = layers.Activation('relu')(net)
net = layers.Conv2D(32, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(dropout_rate)(net)

net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.Conv2D(64, (3, 3), padding='SAME')(net)
net = layers.Activation('relu')(net)
net = layers.MaxPooling2D(pool_size=(2, 2))(net)
net = layers.Dropout(dropout_rate)(net)

net = layers.Flatten()(net)
net = layers.Dense(512)(net)
net = layers.Activation('relu')(net)
net = layers.Dropout(dropout_rate)(net)
net = layers.Dense(num_classes)(net)
net = layers.Activation('softmax')(net)

model = tf.keras.Model(inputs=inputs, outputs=net, name='Basic_CNN')

train

다양한 시도를 통해 학습해볼 필요가 있음.
mnist보다 속도는 느린편

model.fit_generator(
    train_generator,
    steps_per_epoch=len(train_generator),
    epochs=num_epochs,
    validation_data=test_generator,
    validation_steps=len(test_generator)
)

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

댓글