'from_logits=True' ในฟังก์ชันการสูญเสีย Keras/TensorFlow คืออะไร PlatoBlockchain ข้อมูลอัจฉริยะ ค้นหาแนวตั้ง AI.

'from_logits=True' ในฟังก์ชันการสูญเสีย Keras/TensorFlow คืออะไร

กรอบการเรียนรู้เชิงลึกอย่าง 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

ประทับเวลา:

เพิ่มเติมจาก สแต็ค