กรอบการเรียนรู้เชิงลึกอย่าง Keras ช่วยลดอุปสรรคในการเข้ามาของมวลชน และทำให้การพัฒนาโมเดล DL เป็นประชาธิปไตยแก่กลุ่มคนที่ไม่มีประสบการณ์ ซึ่งสามารถพึ่งพาค่าเริ่มต้นที่สมเหตุสมผลและ API ที่ง่ายขึ้นเพื่อรองรับการทำงานหนักและให้ผลลัพธ์ที่ดี
ความสับสนทั่วไปเกิดขึ้นระหว่างผู้ปฏิบัติงานการเรียนรู้เชิงลึกรุ่นใหม่เมื่อใช้ฟังก์ชันการสูญเสีย Keras สำหรับการจัดประเภท เช่น CategoricalCrossentropy
และ SparseCategoricalCrossentropy
:
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)
อะไร
from_logits
ธงหมายถึง?
คำตอบนั้นค่อนข้างง่าย แต่ต้องดูที่ผลลัพธ์ของเครือข่ายที่เรากำลังพยายามให้คะแนนโดยใช้ฟังก์ชันการสูญเสีย
บันทึกและความน่าจะเป็นของ SoftMax
เรื่องสั้นสั้น:
ความน่าจะเป็นถูกทำให้เป็นมาตรฐาน – เช่นมีช่วงระหว่าง
[0..1]
. บันทึกไม่ได้ทำให้เป็นมาตรฐาน และสามารถมีช่วงระหว่าง[-inf...+inf]
.
ขึ้นอยู่กับเลเยอร์เอาต์พุตของเครือข่ายของคุณ:
output = keras.layers.Dense(n, activation='softmax')(x)
output = keras.layers.Dense(n)(x)
ผลลัพธ์ของไฟล์ Dense
ชั้นจะ ทั้ง กลับ:
- ความน่าจะเป็น: เอาต์พุตถูกส่งผ่านฟังก์ชัน SoftMax ซึ่งจะทำให้เอาต์พุตเป็นปกติเป็นชุดของความน่าจะเป็นมากกว่า
n
ที่ทั้งหมดรวมกันเป็น1
. - เข้าสู่ระบบ:
n
การเปิดใช้งาน
ความเข้าใจผิดนี้อาจเกิดจากไวยากรณ์แบบสั้นที่ช่วยให้คุณสามารถเพิ่มการเปิดใช้งานไปยังเลเยอร์ได้ ดูเหมือนว่า เป็นชั้นเดียว แม้ว่าจะเป็นเพียงชวเลขสำหรับ:
output = keras.layers.Dense(n, activation='softmax')(x)
dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)
ฟังก์ชันการสูญเสียของคุณต้องได้รับแจ้งว่าควรคาดหวังการแจกแจงแบบปกติ (เอาต์พุตที่ส่งผ่านฟังก์ชัน SoftMax) หรือการบันทึก ดังนั้น from_logits
ธง!
เมื่อใดควร from_logits=จริง?
หากเครือข่ายของคุณทำให้ความน่าจะเป็นของเอาต์พุตเป็นมาตรฐาน ฟังก์ชันการสูญเสียของคุณควรตั้งค่า from_logits
ไปยัง False
เนื่องจากไม่รับบันทึก นี่เป็นค่าเริ่มต้นของคลาสการสูญเสียทั้งหมดที่ยอมรับแฟล็ก เนื่องจากคนส่วนใหญ่เพิ่ม an activation='softmax'
ไปยังเลเยอร์เอาต์พุต:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10, activation='softmax')
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
ผลลัพธ์นี้ใน:
tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)
เนื่องจากเครือข่ายนี้ส่งผลให้เกิดการกระจายแบบปกติ – เมื่อเปรียบเทียบผลลัพธ์กับผลลัพธ์เป้าหมาย และจัดลำดับผ่านฟังก์ชันการสูญเสียการจำแนกประเภท (สำหรับงานที่เหมาะสม) – คุณควรตั้ง from_logits
ไปยัง False
หรือปล่อยให้ค่าเริ่มต้นคงอยู่
ในทางกลับกัน หากเครือข่ายของคุณไม่ได้ใช้ SoftMax กับเอาต์พุต:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10)
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
ผลลัพธ์นี้ใน:
tf.Tensor(
[[[-0.06081138 0.04154852 0.00153442 0.0705068 -0.01139916
0.08506121 0.1211026 -0.10112958 -0.03410497 0.08653068]]], shape=(1, 1, 10), dtype=float32)
คุณต้องตั้งค่า from_logits
ไปยัง True
สำหรับฟังก์ชั่นการสูญเสียเพื่อรักษาผลลัพธ์อย่างเหมาะสม
เมื่อใดควรใช้ SoftMax กับเอาต์พุต
ผู้ปฏิบัติงานส่วนใหญ่ใช้ SoftMax กับผลลัพธ์เพื่อให้มีการแจกแจงความน่าจะเป็นที่เป็นมาตรฐาน เนื่องจากในหลายกรณีคุณจะใช้เครือข่ายเพื่อทำอะไร โดยเฉพาะในสื่อการศึกษาแบบง่าย อย่างไรก็ตาม ในบางกรณี คุณ ทำไม่ได้ ต้องการใช้ฟังก์ชันกับเอาต์พุตเพื่อประมวลผลด้วยวิธีอื่นก่อนที่จะใช้ SoftMax หรือฟังก์ชันอื่น
ตัวอย่างที่น่าสังเกตมาจากแบบจำลอง NLP ซึ่งจริงๆ แล้วความน่าจะเป็นของคำศัพท์ขนาดใหญ่สามารถแสดงได้ในเมตริกซ์เอาต์พุต การใช้ SoftMax มากกว่า พวกเขาทุกคน และรับ .อย่างตะกละตะกลาม argmax
มักจะไม่ได้ผลลัพธ์ที่ดีมาก
อย่างไรก็ตาม หากคุณสังเกตบันทึก ให้แยก Top-K (โดยที่ K สามารถเป็นตัวเลขใดๆ ก็ได้ แต่โดยทั่วไปแล้วจะอยู่ระหว่าง [0...10]
) แล้วใช้ SoftMax กับ the . เท่านั้น ท็อป k โทเค็นที่เป็นไปได้ในคำศัพท์เปลี่ยนการกระจายอย่างมีนัยสำคัญ และมักจะให้ผลลัพธ์ที่สมจริงยิ่งขึ้น
ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!
สิ่งนี้เรียกว่าการสุ่มตัวอย่าง Top-K และแม้ว่าจะไม่ใช่กลยุทธ์ในอุดมคติ แต่มักจะมีประสิทธิภาพเหนือกว่าการสุ่มตัวอย่างที่โลภมาก
ก้าวต่อไป – การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์
ธรรมชาติที่อยากรู้อยากเห็นของคุณทำให้คุณต้องการไปต่อหรือไม่? เราขอแนะนำให้ตรวจสอบของเรา คอร์ส: “การเรียนรู้เชิงลึกเชิงปฏิบัติสำหรับคอมพิวเตอร์วิทัศน์ด้วย Python”.
หลักสูตร Computer Vision อื่น?
เราจะไม่ทำการจำแนกตัวเลข MNIST หรือแฟชั่น MNIST พวกเขาทำหน้าที่ส่วนของตนเมื่อนานมาแล้ว ทรัพยากรการเรียนรู้จำนวนมากเกินไปมุ่งเน้นไปที่ชุดข้อมูลพื้นฐานและสถาปัตยกรรมพื้นฐาน ก่อนปล่อยให้สถาปัตยกรรมกล่องดำขั้นสูงรับภาระด้านประสิทธิภาพ
เราต้องการที่จะมุ่งเน้นไปที่ การทำให้ลึกลับ, การปฏิบัติจริง, ความเข้าใจ, ปรีชา และ โครงการจริง. ต้องการเรียน อย่างไร คุณสามารถสร้างความแตกต่าง? เราจะพาคุณเดินทางตั้งแต่วิธีที่สมองของเราประมวลผลภาพไปจนถึงการเขียนตัวแยกประเภทการเรียนรู้เชิงลึกระดับการวิจัยสำหรับมะเร็งเต้านม ไปจนถึงเครือข่ายการเรียนรู้เชิงลึกที่ "หลอน" สอนหลักการและทฤษฎีแก่คุณผ่านการทำงานจริง เพื่อให้คุณมี ความรู้และเครื่องมือในการเป็นผู้เชี่ยวชาญในการประยุกต์ใช้การเรียนรู้เชิงลึกเพื่อแก้ปัญหาคอมพิวเตอร์วิทัศน์
อะไรอยู่ข้างใน?
- หลักการมองเห็นเบื้องต้นและวิธีการสอนคอมพิวเตอร์ให้ “มองเห็น”
- งานต่างๆ และการประยุกต์ใช้คอมพิวเตอร์วิทัศน์
- เครื่องมือการค้าที่จะทำให้งานของคุณง่ายขึ้น
- การค้นหา การสร้าง และการใช้ชุดข้อมูลสำหรับคอมพิวเตอร์วิทัศน์
- ทฤษฎีและการประยุกต์ใช้ Convolutional Neural Networks
- การจัดการการเปลี่ยนแปลงโดเมน การเกิดขึ้นร่วม และอคติอื่นๆ ในชุดข้อมูล
- ถ่ายทอดการเรียนรู้และใช้เวลาฝึกอบรมและทรัพยากรการคำนวณของผู้อื่นเพื่อประโยชน์ของคุณ
- การสร้างและฝึกอบรมผู้จำแนกมะเร็งเต้านมที่ล้ำสมัย
- วิธีการใช้ความสงสัยที่ดีต่อสุขภาพกับแนวคิดกระแสหลักและทำความเข้าใจกับความหมายของเทคนิคที่นำมาใช้กันอย่างแพร่หลาย
- การแสดงภาพ "พื้นที่แนวคิด" ของ ConvNet โดยใช้ t-SNE และ PCA
- กรณีศึกษาวิธีที่บริษัทต่างๆ ใช้เทคนิคการมองเห็นด้วยคอมพิวเตอร์เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น
- การประเมินแบบจำลองที่เหมาะสม การสร้างภาพพื้นที่แฝง และการระบุความสนใจของแบบจำลอง
- ดำเนินการวิจัยโดเมน ประมวลผลชุดข้อมูลของคุณเอง และสร้างการทดสอบแบบจำลอง
- สถาปัตยกรรมล้ำสมัย ความก้าวหน้าของแนวคิด สิ่งที่ทำให้มีเอกลักษณ์เฉพาะตัว และวิธีนำไปใช้
- KerasCV – ไลบรารี WIP สำหรับสร้างไปป์ไลน์และโมเดลที่ทันสมัย
- วิธีแยกวิเคราะห์และอ่านเอกสารและนำไปใช้เอง
- การเลือกรุ่นขึ้นอยู่กับการใช้งานของคุณ
- การสร้างไปป์ไลน์การเรียนรู้ของเครื่องแบบ end-to-end
- ภูมิทัศน์และสัญชาตญาณในการตรวจจับวัตถุด้วย R-CNN ที่เร็วกว่า, RetinaNets, SSD และ YOLO
- การแบ่งกลุ่มตัวอย่างและความหมาย
- การจดจำวัตถุแบบเรียลไทม์ด้วย YOLOv5
- การฝึกอบรมเครื่องตรวจจับวัตถุ YOLOv5
- การทำงานกับ Transformers โดยใช้ KerasNLP (ไลบรารี WIP ที่มีความแข็งแกร่งในอุตสาหกรรม)
- การรวม Transformers เข้ากับ ConvNets เพื่อสร้างคำบรรยายภาพ
- Deepdream
สรุป
ในคำแนะนำสั้น ๆ นี้ เราได้ดูที่ from_logits
อาร์กิวเมนต์สำหรับคลาสการสูญเสีย Keras ซึ่งมักจะตั้งคำถามกับผู้ปฏิบัติงานใหม่
ความสับสนอาจเกิดขึ้นจากไวยากรณ์แบบสั้นที่อนุญาตให้เพิ่มเลเยอร์การเปิดใช้งานที่ด้านบนของเลเยอร์อื่น ๆ ภายในคำจำกัดความของเลเยอร์เอง ในที่สุดเราก็ได้ดูกันแล้วว่าควรตั้งค่าอาร์กิวเมนต์เป็น True
or False
และเมื่อเอาต์พุตควรปล่อยให้เป็นบันทึกหรือส่งผ่านฟังก์ชันการเปิดใช้งาน เช่น SoftMax