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