CNTK - การตรวจสอบโมเดล
ในบทนี้เราจะเข้าใจวิธีการตรวจสอบโมเดลใน CNTK
บทนำ
ในส่วนก่อนหน้านี้เราได้ทำการตรวจสอบความถูกต้องของโมเดล NN ของเราแล้ว แต่จำเป็นและเป็นไปได้หรือไม่ที่จะตรวจสอบโมเดลของเราในระหว่างการฝึกอบรม
ใช่เราได้ใช้แล้ว ProgressWriterชั้นเรียนเพื่อตรวจสอบโมเดลของเราและยังมีอีกหลายวิธีที่จะทำเช่นนั้น ก่อนที่จะเจาะลึกถึงวิธีการก่อนอื่นเรามาดูกันว่าการตรวจสอบใน CNTK ทำงานอย่างไรและเราจะใช้มันเพื่อตรวจหาปัญหาในโมเดล NN ของเราได้อย่างไร
การโทรกลับใน CNTK
จริงๆแล้วในระหว่างการฝึกอบรมและการตรวจสอบความถูกต้อง CNTK ช่วยให้เราระบุการเรียกกลับในหลายจุดใน API ก่อนอื่นเรามาดูอย่างละเอียดยิ่งขึ้นเมื่อ CNTK เรียกใช้การโทรกลับ
เมื่อ CNTK เรียกใช้การโทรกลับ?
CNTK จะเรียกใช้การโทรกลับในช่วงเวลาการฝึกอบรมและการทดสอบเมื่อ −
รถสองแถวเสร็จสมบูรณ์
การกวาดล้างชุดข้อมูลทั้งหมดจะเสร็จสมบูรณ์ในระหว่างการฝึกอบรม
การทดสอบมินิแบทช์เสร็จสมบูรณ์
การกวาดล้างชุดข้อมูลทั้งหมดเสร็จสมบูรณ์ในระหว่างการทดสอบ
การระบุการโทรกลับ
ในขณะที่ทำงานกับ CNTK เราสามารถระบุการเรียกกลับได้หลายจุดใน API ตัวอย่างเช่น
เมื่อโทรฝึกฟังก์ชั่นการสูญเสีย?
ที่นี่เมื่อเราเรียกใช้ train on a loss function เราสามารถระบุชุดของการโทรกลับผ่านอาร์กิวเมนต์การเรียกกลับได้ดังนี้ −
training_summary=loss.train((x_train,y_train),
parameter_learners=[learner],
callbacks=[progress_writer]),
minibatch_size=16, max_epochs=15)
เมื่อทำงานกับแหล่งที่มาของมินิแบทช์หรือใช้มินิแบทช์แบบแมนนวล −
ในกรณีนี้เราสามารถระบุการเรียกกลับเพื่อตรวจสอบจุดประสงค์ในขณะที่สร้างไฟล์ Trainer ดังต่อไปนี้
from cntk.logging import ProgressPrinter
callbacks = [
ProgressPrinter(0)
]
Trainer = Trainer(z, (loss, metric), learner, [callbacks])
เครื่องมือตรวจสอบต่างๆ
ให้เราศึกษาเกี่ยวกับเครื่องมือตรวจสอบต่างๆ
ProgressPrinter
ในขณะที่อ่านบทแนะนำนี้คุณจะพบ ProgressPrinterเป็นเครื่องมือตรวจสอบที่ใช้มากที่สุด ลักษณะบางอย่างของProgressPrinter เครื่องมือตรวจสอบคือ
ProgressPrinterคลาสใช้การบันทึกบนคอนโซลพื้นฐานเพื่อตรวจสอบโมเดลของเรา มันสามารถเข้าสู่ดิสก์ที่เราต้องการได้
มีประโยชน์อย่างยิ่งในขณะที่ทำงานในสถานการณ์การฝึกอบรมแบบกระจาย
นอกจากนี้ยังมีประโยชน์มากในขณะที่ทำงานในสถานการณ์ที่เราไม่สามารถเข้าสู่ระบบบนคอนโซลเพื่อดูผลลัพธ์ของโปรแกรม Python ของเรา
ด้วยความช่วยเหลือของรหัสต่อไปนี้เราสามารถสร้างอินสแตนซ์ของ ProgressPrinter-
ProgressPrinter(0, log_to_file=’test.txt’)
เราจะได้ผลลัพธ์บางอย่างที่เราได้เห็นในส่วนก่อนหน้านี้
Test.txt
CNTKCommandTrainInfo: train : 300
CNTKCommandTrainInfo: CNTKNoMoreCommands_Total : 300
CNTKCommandTrainBegin: train
-------------------------------------------------------------------
average since average since examples
loss last metric last
------------------------------------------------------
Learning rate per minibatch: 0.1
1.45 1.45 -0.189 -0.189 16
1.24 1.13 -0.0382 0.0371 48
[………]
TensorBoard
ข้อเสียอย่างหนึ่งของการใช้ ProgressPrinter คือเราไม่สามารถเข้าใจได้ดีว่าการสูญเสียและความคืบหน้าของเมตริกเมื่อเวลาผ่านไปนั้นยากเพียงใด TensorBoardProgressWriter เป็นทางเลือกที่ดีสำหรับคลาส ProgressPrinter ใน CNTK
ก่อนใช้งานเราต้องติดตั้งก่อนโดยใช้คำสั่งต่อไปนี้ -
pip install tensorboard
ตอนนี้เพื่อที่จะใช้ TensorBoard เราจำเป็นต้องตั้งค่า TensorBoardProgressWriter ในรหัสการฝึกอบรมของเราดังนี้
import time
from cntk.logging import TensorBoardProgressWriter
tensorbrd_writer = TensorBoardProgressWriter(log_dir=’logs/{}’.format(time.time()),freq=1,model=z)
เป็นแนวทางปฏิบัติที่ดีในการเรียกใช้วิธีการปิด TensorBoardProgressWriter หลังจากเสร็จสิ้นด้วยการฝึกอบรมของ NNแบบ.
เราสามารถเห็นภาพไฟล์ TensorBoard บันทึกข้อมูลด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -
Tensorboard –logdir logs