การเรียนรู้เชิงลึกด้วย Keras: การฝึกอบรมโครงข่ายประสาทเทียมด้วย Keras [ด้วยรหัส]

เผยแพร่แล้ว: 2020-12-24

Keras เป็นไลบรารี Python ที่ให้ API เพื่อทำงานกับ Neural Networks และเฟรมเวิร์กการเรียนรู้เชิงลึก Keras มีฟังก์ชันและโมดูลที่มีประโยชน์มากเมื่อต้องจัดการกับแอปพลิเคชัน Deep Learning ต่างๆ ใน ​​Python

ในตอนท้ายของบทช่วยสอนนี้ คุณจะมีความรู้ดังต่อไปนี้:

  1. Keras คืออะไร?
  2. Keras APIs
  3. การฝึกอบรมโครงข่ายประสาทเทียมใน Keras

สารบัญ

Keras คืออะไร?

ในการทำ Deep Learning ไลบรารี่ที่ใช้บ่อยที่สุดก่อนหน้านี้คือ Tensorflow 1.x ซึ่งยากต่อการจัดการสำหรับผู้เริ่มต้น ต้องใช้การเข้ารหัสจำนวนมากเพื่อสร้างเครือข่าย 1 เลเยอร์พื้นฐาน อย่างไรก็ตาม ด้วย Keras กระบวนการที่สมบูรณ์ในการสร้างโครงสร้างของ Neural Network จากนั้นการฝึกอบรมและการติดตามจึงกลายเป็นเรื่องง่ายมาก

Keras เป็น API ระดับสูงซึ่งสามารถทำงานบนแบ็กเอนด์ Tensorflow, Theano และ CNTK มันทำให้เราสามารถทำการทดลองโดยใช้โครงข่ายประสาทเทียมโดยใช้ API ระดับสูงและใช้งานง่าย นอกจากนี้ยังสามารถทำงานบน CPU และ GPU ได้อีกด้วย

Keras APIs

Keras มีโมดูล API ที่แตกต่างกัน 10 โมดูลเพื่อรองรับการสร้างแบบจำลองและการฝึกอบรมโครงข่ายประสาทเทียม มาดูแต่ละข้อเพื่อทำความเข้าใจว่า Keras ทั้งหมดมีอะไรบ้าง

โมเดล

Models API จัดเตรียมฟังก์ชันการทำงานเพื่อสร้างโครงข่ายประสาทเทียมที่ซับซ้อนโดยการเพิ่ม/ลบเลเยอร์ โมเดลนี้สามารถเป็นแบบ Sequential ได้ ซึ่งหมายความว่าเลเยอร์ต่างๆ จะซ้อนกันตามลำดับด้วยอินพุตและเอาต์พุตเดี่ยว โมเดลนี้ยังใช้งานได้จริง มีความหมายด้วยโมเดลที่ปรับแต่งได้อย่างเต็มที่ นี่คือสิ่งที่ใช้ในอุตสาหกรรมเป็นส่วนใหญ่

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

เลเยอร์

เลเยอร์เป็นหน่วยการสร้างของโครงข่ายประสาทเทียมใดๆ Layers API นำเสนอชุดวิธีการที่สมบูรณ์สำหรับการสร้างสถาปัตยกรรมเครือข่ายประสาทเทียม Layers API มีคลาส Base Layer ซึ่งมีวิธีการที่จำเป็นในการสร้างเลเยอร์ที่กำหนดเองด้วยน้ำหนักและตัวเริ่มต้นที่กำหนดเอง

ประกอบด้วยคลาส Layer Activations ซึ่งประกอบด้วยฟังก์ชันการเปิดใช้งานต่างๆ เช่น ReLU, Sigmoid, Tanh, Softmax เป็นต้น คลาส Layer Weight Initializers นำเสนอวิธีการเริ่มต้นตุ้มน้ำหนักโดยใช้วิธีต่างๆ

นอกจากนี้ยังประกอบด้วยคลาส Core Layers ซึ่งประกอบด้วยคลาสที่จำเป็นในการเพิ่มเลเยอร์คอร์ เช่น Dense layer, Activation Layer, Embedding layer เป็นต้น คลาส Convolution Layer มีวิธีการที่หลากหลายในการเพิ่มประเภท Convolution เลเยอร์ต่างๆ คลาส Pooling Layers มีวิธีการที่จำเป็นสำหรับการพูลประเภทต่างๆ เช่น Max Pooling, Average Pooling, Global Max Pooling และ Global Average Pooling

โทรกลับ

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

  • ตรวจสอบตัววัดการฝึกอบรมโดยการบันทึกตัววัดใน TensorFlow Board
  • กำลังบันทึกโมเดลลงดิสก์เป็นระยะ
  • หยุดก่อนเวลาในกรณีที่การสูญเสียไม่ลดลงอย่างมากหลังจากยุคใดยุคหนึ่ง
  • ดูสถานะภายในและสถิติของแบบจำลองระหว่างการฝึก

การประมวลผลชุดข้อมูลล่วงหน้า

ข้อมูลมักจะอยู่ในรูปแบบดิบและอยู่ในไดเร็กทอรีที่จัดเรียงไว้ และจำเป็นต้องได้รับการประมวลผลล่วงหน้าก่อนป้อนไปยังโมเดลเพื่อการปรับให้เหมาะสม คลาส Image Data Preprocessing มีฟังก์ชันเฉพาะมากมาย ตัวอย่างเช่น ข้อมูลรูปภาพต้องอยู่ในอาร์เรย์ตัวเลขที่เราสามารถใช้ฟังก์ชัน img_to_array ได้ หรือหากมีรูปภาพอยู่ในไดเร็กทอรีและโฟลเดอร์ย่อย เราสามารถใช้ฟังก์ชัน image_dataset_from_directory

Data Preprocessing API ยังมีคลาสสำหรับข้อมูลอนุกรมเวลาและข้อมูลข้อความอีกด้วย

เครื่องมือเพิ่มประสิทธิภาพ

เครื่องมือเพิ่มประสิทธิภาพเป็นแกนหลักของโครงข่ายประสาทเทียมใดๆ โครงข่ายประสาทเทียมทุกเครือข่ายทำงานเพื่อปรับฟังก์ชันการสูญเสียให้เหมาะสมที่สุดเพื่อค้นหาน้ำหนักที่ดีที่สุดสำหรับการทำนาย เครื่องมือเพิ่มประสิทธิภาพมีหลายประเภทซึ่งใช้เทคนิคที่แตกต่างกันเล็กน้อยเพื่อค้นหาตุ้มน้ำหนักที่เหมาะสมที่สุด เครื่องมือเพิ่มประสิทธิภาพทั้งหมดนี้มีอยู่ใน Optimizers API – SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL

ขาดทุน

จำเป็นต้องระบุฟังก์ชันการสูญเสียเมื่อรวบรวมแบบจำลอง ฟังก์ชันการสูญเสียนี้จะได้รับการปรับให้เหมาะสมโดยเครื่องมือเพิ่มประสิทธิภาพซึ่งส่งผ่านเป็นพารามิเตอร์ในวิธีการคอมไพล์ด้วย การสูญเสียหลักสามประเภทคือ: การสูญเสียที่น่าจะเป็น, การสูญเสียการถดถอย, การสูญเสียบานพับ

ตัวชี้วัด

มีการใช้เมตริกในโมเดล ML ทุกรูปแบบเพื่อวัดประสิทธิภาพในข้อมูลการทดสอบ เมตริกคล้ายกับ Loss Functions ยกเว้นว่าจะใช้กับข้อมูลการทดสอบ มีตัววัดความแม่นยำมากมาย เช่น ความแม่นยำ ความแม่นยำไบนารี ความแม่นยำตามหมวดหมู่ เป็นต้น นอกจากนี้ยังมีตัววัดความน่าจะเป็น เช่น Binary Cross Entropy, Categorical Cross Entropy เป็นต้น มีตัวชี้วัดสำหรับตรวจสอบผลบวก/ค่าลบที่ผิดพลาด เช่น AUC ความแม่นยำ การเรียกคืน ฯลฯ

นอกเหนือจากเมตริกการจัดหมวดหมู่เหล่านี้แล้ว ยังมีเมตริกการถดถอย เช่น Mean Squared Error, Root Mean Squared Error, Mean Absolute Error เป็นต้น

อ่านเพิ่มเติม: Keras และ TensorFlow คืออะไร

Keras Applications

คลาส Keras Applications ประกอบด้วยรุ่นที่สร้างไว้ล่วงหน้าบางรุ่นพร้อมกับตุ้มน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า โมเดลที่ผ่านการฝึกอบรมล่วงหน้าเหล่านี้ใช้สำหรับกระบวนการโอนย้ายการเรียนรู้ โมเดลที่ผ่านการฝึกอบรมล่วงหน้าเหล่านี้จะแตกต่างกันไปตามสถาปัตยกรรม จำนวนเลเยอร์ น้ำหนักที่ฝึกได้ ฯลฯ บางรุ่น ได้แก่ Xception, VGG16, Resnet50, MobileNet เป็นต้น

ฝึกโครงข่ายประสาทเทียมกับ Keras

ลองพิจารณาชุดข้อมูลอย่างง่าย เช่น MNIST ซึ่งมีอยู่ในคลาสชุดข้อมูลของ Keras เราจะสร้าง Convolutional Neural Network แบบเรียงลำดับอย่างง่ายสำหรับจำแนกรูปภาพที่เขียนด้วยลายมือของตัวเลข 0-9

#กำลังโหลดชุดข้อมูล

จาก keras.datasets นำเข้า mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

ปรับชุดข้อมูลให้เป็นมาตรฐานโดยหารแต่ละพิกเซลด้วย 255 นอกจากนี้ จำเป็นต้องแปลงรูปภาพเป็น 4 มิติก่อนที่จะป้อนลงในโมเดล CNN

x_train = x_train.astype( 'float32' )
x_test = x_test.astype( 'float32' )
x_train /= 255
x_test /= 255

x_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 )
x_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 )

เราจำเป็นต้องติดป้ายกำกับการเข้ารหัสคลาสก่อนป้อนให้กับโมเดล เราจะทำอย่างนั้นโดยใช้คลาส Utils ของ Keras

จาก keras.utils นำเข้า to_categorical


y_train = to_categorical(y_train, 10 )
y_test = to_categorical(y_test, 10 )

ตอนนี้ เราสามารถเริ่มสร้างโมเดลโดยใช้ Sequential API

จาก keras.models นำเข้า Sequential
จาก keras.layers นำเข้า Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), enable= 'relu' , input_shape=x_train.shape[ 1 :]))
model.add(MaxPool2D(pool_size=( 2 , 2 )))
model.add(ออกกลางคัน(อัตรา= 0.25 ))
model.add(Conv2D(ตัวกรอง= 64 , kernel_size=( 3 , 3 ), การเปิดใช้งาน= 'relu' ))
model.add(MaxPool2D(pool_size=( 2 , 2 )))
model.add(ออกกลางคัน(อัตรา= 0.25 ))
model.add(แบน())
model.add(หนาแน่น ( 256 , การเปิดใช้งาน = 'relu' ))
model.add(ออกกลางคัน(อัตรา= 0.5 ))
model.add (หนาแน่น ( 10 การเปิดใช้งาน = 'softmax' ))

ในโค้ดด้านบนนี้ เราประกาศโมเดลตามลำดับแล้วเพิ่มหลายเลเยอร์เข้าไป ชั้น Convolutional ตามด้วยชั้น Max Pooling และชั้น dropout สำหรับการทำให้เป็นมาตรฐาน ต่อมาเราทำให้ผลลัพธ์เรียบขึ้นโดยใช้เลเยอร์ที่แบนราบ และชั้นสุดท้ายเป็นชั้นหนาแน่นที่เชื่อมต่ออย่างเต็มที่ด้วย 10 โหนด

ต่อไป เราต้องคอมไพล์มันโดยส่งฟังก์ชันการสูญเสีย ตัวเพิ่มประสิทธิภาพ และตัววัด

model.คอมไพล์(
การสูญเสีย= 'categorical_crossentropy' ,
เครื่องมือเพิ่มประสิทธิภาพ= 'อดัม' ,
metrics=[ 'ความแม่นยำ' ]
)

ตอนนี้ เราต้องเพิ่มรูปภาพเสริมจากรูปภาพต้นฉบับ เพื่อเพิ่มชุดการฝึกและความแม่นยำของแบบจำลอง เราจะทำอย่างนั้นโดยใช้ฟังก์ชัน ImageDataGenerator

จาก keras.preprocessing.image นำเข้า ImageDataGenerator

datagen = ImageDataGenerator (
การหมุน_range= 10 ,
zoom_range= 0.1 ,
width_shift_range= 0.1 ,
height_shift_range= 0.1
)

เมื่อรวบรวมแบบจำลองและเสริมภาพแล้ว เราก็สามารถเริ่มกระบวนการฝึกอบรมได้ เนื่องจากเราใช้ Image Data Generator ด้านบน เราจะใช้วิธี fit_generator มากกว่าที่จะพอดี

ยุค = 3
batch_size = 32
ประวัติ = model.fit_generator ( datagen.flow (x_train, y_train, batch_size=batch_size), epochs=epochs,
validation_data=(x_test, y_test), steps_per_epoch=x_train.shape[ 0 ]//batch_size )

ผลลัพธ์ของกระบวนการฝึกอบรมมีดังนี้:

3ตอนนี้ โมเดลได้รับการฝึกอบรมและสามารถประเมินได้โดยการรันบนข้อมูลการทดสอบที่มองไม่เห็น

การอ่านที่เกี่ยวข้อง: Deep Learning & Neural Networks กับ Keras

ก่อนที่คุณจะไป

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

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับแมชชีนเลิร์นนิง โปรดดูที่ IIIT-B & upGrad's PG Diploma in Machine Learning & AI ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 450 ชั่วโมง กรณีศึกษาและการมอบหมายมากกว่า 30 รายการ IIIT- สถานะศิษย์เก่า B, 5+ โครงการหลักที่ใช้งานได้จริง & ความช่วยเหลือด้านงานกับบริษัทชั้นนำ

เป็นผู้นำการปฏิวัติเทคโนโลยีที่ขับเคลื่อนด้วย AI

PG DIPLOMA ในการเรียนรู้ของเครื่องและปัญญาประดิษฐ์จาก IIIT BANGALORE
เรียนรู้เพิ่มเติม