การเรียนรู้เชิงลึกด้วย 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)
ในขั้นตอนนี้ข้อมูลของคุณได้รับการเตรียมอย่างสมบูรณ์สำหรับป้อนเข้าสู่เครือข่าย
ถัดไปเป็นส่วนที่สำคัญที่สุดนั่นคือการฝึกอบรมรูปแบบเครือข่ายของเรา