การเรียนรู้เชิงลึกด้วย Keras - การเตรียมข้อมูล

ก่อนที่เราจะป้อนข้อมูลไปยังเครือข่ายของเราข้อมูลนั้นจะต้องถูกแปลงเป็นรูปแบบที่เครือข่ายต้องการ เรียกว่าการเตรียมข้อมูลสำหรับเครือข่าย โดยทั่วไปจะประกอบด้วยการแปลงอินพุตหลายมิติเป็นเวกเตอร์มิติเดียวและปรับจุดข้อมูลให้เป็นปกติ

การปรับรูปแบบเวกเตอร์อินพุต

ภาพในชุดข้อมูลของเราประกอบด้วย 28 x 28 พิกเซล สิ่งนี้ต้องถูกแปลงเป็นเวกเตอร์มิติเดียวขนาด 28 * 28 = 784 เพื่อป้อนลงในเครือข่ายของเรา เราทำได้โดยโทรไปที่ไฟล์reshape วิธีการบนเวกเตอร์

X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)

ตอนนี้เวกเตอร์การฝึกของเราจะประกอบด้วยจุดข้อมูล 60000 จุดแต่ละจุดประกอบด้วยเวกเตอร์มิติเดียวขนาด 784 ในทำนองเดียวกันเวกเตอร์ทดสอบของเราจะประกอบด้วยจุดข้อมูล 10,000 จุดของเวกเตอร์มิติเดียวขนาด 784

Normalizing ข้อมูล

ข้อมูลที่เวกเตอร์อินพุตมีอยู่ในปัจจุบันมีค่าที่ไม่ต่อเนื่องระหว่าง 0 ถึง 255 - ระดับสีเทา การปรับค่าพิกเซลให้เป็นปกติระหว่าง 0 ถึง 1 จะช่วยในการเร่งการฝึกอบรม ในขณะที่เรากำลังจะใช้การสืบเชื้อสายแบบสุ่มการไล่ระดับสีข้อมูลการทำให้เป็นมาตรฐานจะช่วยลดโอกาสที่จะติดอยู่ในออพติมาในเครื่อง

ในการทำให้ข้อมูลเป็นปกติเราจะแสดงเป็นประเภทลอยและหารด้วย 255 ดังที่แสดงในข้อมูลโค้ดต่อไปนี้ -

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255

ตอนนี้ให้เราดูว่าข้อมูลปกติมีลักษณะอย่างไร

การตรวจสอบข้อมูลปกติ

หากต้องการดูข้อมูลที่ทำให้เป็นมาตรฐานเราจะเรียกฟังก์ชันฮิสโตแกรมดังที่แสดงไว้ที่นี่ -

plot.hist(X_train[0])
plot.title("Digit: {}".format(y_train[0]))

ที่นี่เราพล็อตฮิสโตแกรมขององค์ประกอบแรกของไฟล์ X_trainเวกเตอร์. นอกจากนี้เรายังพิมพ์ตัวเลขที่แสดงโดยจุดข้อมูลนี้ ผลลัพธ์ของการรันโค้ดด้านบนแสดงไว้ที่นี่ -

คุณจะสังเกตเห็นความหนาแน่นของจุดที่มีค่าใกล้เคียงกับศูนย์ จุดเหล่านี้คือจุดสีดำในภาพซึ่งเห็นได้ชัดว่าเป็นส่วนหลักของภาพ ส่วนที่เหลือของจุดสเกลสีเทาซึ่งใกล้เคียงกับสีขาวจะแสดงตัวเลข คุณสามารถตรวจสอบการกระจายของพิกเซลสำหรับตัวเลขอื่น รหัสด้านล่างจะพิมพ์ฮิสโตแกรมของตัวเลขที่ดัชนี 2 ในชุดข้อมูลการฝึกอบรม

plot.hist(X_train[2])
plot.title("Digit: {}".format(y_train[2])

ผลลัพธ์ของการรันโค้ดด้านบนแสดงไว้ด้านล่าง -

เมื่อเปรียบเทียบสองรูปด้านบนคุณจะสังเกตเห็นว่าการกระจายของพิกเซลสีขาวในสองภาพแตกต่างกันโดยบ่งบอกถึงการแสดงตัวเลขที่ต่างกัน -“ 5” และ“ 4” ในสองภาพด้านบน

ต่อไปเราจะตรวจสอบการกระจายของข้อมูลในชุดข้อมูลการฝึกอบรมทั้งหมดของเรา

ตรวจสอบการกระจายข้อมูล

ก่อนที่เราจะฝึกโมเดลแมชชีนเลิร์นนิงบนชุดข้อมูลของเราเราควรทราบการกระจายของตัวเลขที่ไม่ซ้ำกันในชุดข้อมูลของเรา รูปภาพของเราแสดงตัวเลข 10 หลักที่แตกต่างกันตั้งแต่ 0 ถึง 9 เราต้องการทราบจำนวนหลัก 0, 1 และอื่น ๆ ในชุดข้อมูลของเรา เราสามารถรับข้อมูลนี้ได้โดยใช้ไฟล์unique วิธีการ Numpy

ใช้คำสั่งต่อไปนี้เพื่อพิมพ์จำนวนค่าที่ไม่ซ้ำกันและจำนวนครั้งที่เกิดขึ้นของแต่ละค่า

print(np.unique(y_train, return_counts=True))

เมื่อคุณรันคำสั่งด้านบนคุณจะเห็นผลลัพธ์ต่อไปนี้ -

(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8), array([5923, 6742, 5958, 6131, 5842, 5421, 5918, 6265, 5851, 5949]))

มันแสดงให้เห็นว่ามีค่าที่แตกต่างกัน 10 ค่า - 0 ถึง 9 มีการเกิดขึ้น 5923 ครั้งของตัวเลข 0, 6742 ครั้งของตัวเลข 1 และอื่น ๆ ภาพหน้าจอของผลลัพธ์แสดงที่นี่ -

ในขั้นตอนสุดท้ายในการเตรียมข้อมูลเราจำเป็นต้องเข้ารหัสข้อมูลของเรา

การเข้ารหัสข้อมูล

เรามีสิบหมวดหมู่ในชุดข้อมูลของเรา ดังนั้นเราจะเข้ารหัสผลลัพธ์ของเราในสิบประเภทนี้โดยใช้การเข้ารหัสแบบร้อนเดียว เราใช้วิธี to_categorial ของยูทิลิตี้ Numpy เพื่อทำการเข้ารหัส หลังจากเข้ารหัสข้อมูลเอาต์พุตแล้วจุดข้อมูลแต่ละจุดจะถูกแปลงเป็นเวกเตอร์มิติเดียวที่มีขนาด 10 ตัวอย่างเช่นตัวเลข 5 จะแสดงเป็น [0,0,0,0,0,1,0,0,0 , 0]

เข้ารหัสข้อมูลโดยใช้โค้ดต่อไปนี้ -

n_classes = 10
Y_train = np_utils.to_categorical(y_train, n_classes)

คุณสามารถตรวจสอบผลลัพธ์ของการเข้ารหัสได้โดยพิมพ์ 5 องค์ประกอบแรกของเวกเตอร์ Y_train ที่จัดหมวดหมู่

ใช้รหัสต่อไปนี้เพื่อพิมพ์เวกเตอร์ 5 ตัวแรก -

for i in range(5):
   print (Y_train[i])

คุณจะเห็นผลลัพธ์ต่อไปนี้ -

[0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]

องค์ประกอบแรกแสดงถึงหลัก 5 ส่วนที่สองหมายถึงเลข 0 และอื่น ๆ

สุดท้ายคุณจะต้องจัดหมวดหมู่ข้อมูลการทดสอบด้วยซึ่งทำได้โดยใช้คำสั่งต่อไปนี้ -

Y_test = np_utils.to_categorical(y_test, n_classes)

ในขั้นตอนนี้ข้อมูลของคุณได้รับการเตรียมอย่างสมบูรณ์สำหรับป้อนเข้าสู่เครือข่าย

ถัดไปเป็นส่วนที่สำคัญที่สุดนั่นคือการฝึกอบรมรูปแบบเครือข่ายของเรา