1. การอ่านไฟล์จาก csv
import pandas as pd
rcsv = pd.read_csv('train.csv', dtype={'image': 'object', 'category': 'int8'})
rcsv.head()
2. การแยกคอลัมน์เป็น array
x = rcsv.iloc[:, :-1].values
y = rcsv.iloc[:, 1].values
3. การดึงข้อมูลมาสร้างเป็น list ธรรมดา
list_x = []
for i in range(len(x)):
list_x.append(x[i][0])
import os
path_dir = 'train'
list_x_from_dir = []
for file in os.listdir(path_dir):
list_x_from_dir.append(file)
4. การอ่านรูปภาพ ตามขนาดที่กำหนด
from keras.preprocessing.image import load_img
img_path = 'train/2823080.jpg'
img_dim = (150, 150)
img1 = load_img(img_path, target_size=img_dim)
5. การแปลงรูปภาพเป็น Array
from keras.preprocessing.image import img_to_array, array_to_img
arr_img1 = img_to_array(img1)
arr_to_img1 = array_to_img(arr_img1)
6. การสร้าง list ของรูปที่เป็น array
list_arr_images = []
for img_name in list_x:
list_arr_images.append(img_to_array(load_img('train/'+img_name, target_size=img_dim)))
หรือเขียนแบบสั้นๆ ดังนี้
list_arr_images = [img_to_array(load_img('train/'+img_name, target_size=img_dim)) for img_name in list_x]
7. การแปลงให้รูปเป็น numpy array
import numpy as np
np_arr_x = np.array(list_arr_images)
8. การแปลง label ให้เป็นตัวเลข
ตัวเลขใน label ต้องเริ่มจาก 0 จึงจะมาแปลงเป็น to_categorical ได้ จึงต้องลบ 1 เพราะ label เดิมคือ 1, 2, 3, 4, 5y_cat = rcsv['category'].values
from keras.utils import to_categorical
y_to_cat = to_categorical(y_cat-1)
9. การแบ่งข้อมูลสำหรับ train และ validation
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(np_arr_x, y_to_cat, test_size=0.2, random_state=42)
9. การกำหนดค่า augmentation และ rescale ด้วย ImageDataGenerator
from keras.preprocessing.image import ImageDataGenerator
batch_size = 32
#Create the augmentation configuration
train_datagen = ImageDataGenerator(rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,)
val_datagen = ImageDataGenerator(rescale=1./255)
#Create the image generators
train_generator = train_datagen.flow(x_train, y_train, batch_size=batch_size)
val_generator = val_datagen.flow(x_val, y_val, batch_size=batch_size)
หรือใส่ชนิดค่าและการ rescale เอง (manually)
np_arr_x_float = np_arr_x.astype('float32')
np_arr_x_scaled /= 255
10. การสร้าง Model
from tensorflow.keras import layers
from tensorflow.keras import models
from tensorflow.keras import optimizers
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',input_shape=(150, 150, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(5, activation='softmax'))
model.summary()
Sign up here with your email
ConversionConversion EmoticonEmoticon