คำเตือน: กระบวนการดึง: โหมด sample_weight ถูกบังคับจาก ... ถึง ['…']


47

อบรมการใช้ตัวจําแนกภาพโดยใช้.fit_generator()หรือ.fit()ผ่านพจนานุกรมไปclass_weight=เป็นอาร์กิวเมนต์

ฉันไม่เคยพบข้อผิดพลาดใน TF1.x แต่ใน 2.1 ฉันจะได้ผลลัพธ์ต่อไปนี้เมื่อเริ่มการฝึก:

WARNING:tensorflow:sample_weight modes were coerced from
  ...
    to  
  ['...']

การบีบบังคับอะไรบางอย่างตั้งแต่ต้น...จนถึง['...']อะไร?

แหล่งที่มาสำหรับคำเตือนtensorflowของ repo อยู่ที่นี่ความคิดเห็นที่วางไว้คือ:

พยายามบีบบังคับ sample_weight_modes กับโครงสร้างเป้าหมาย สิ่งนี้ย่อมขึ้นอยู่กับความจริงที่ว่า Model แบนเอาท์พุทสำหรับการเป็นตัวแทนภายใน


7
ตลกที่เห็นคำถามล่าสุดเช่นเดียวกับผลการค้นหาคำเตือนของฉันเองเช่นกัน
jmkjaer

1
@jorijnsmit คุณสามารถให้รหัสเพื่อทำซ้ำปัญหา / คำเตือนได้หรือไม่
thushv89

2
การสลับไปใช้ TF2 จริง ๆ แล้ว%tensorflow_version 2.xเพียงพอที่จะทำให้คำเตือนนี้ปรากฏขึ้น: colab.research.google.com/gist/jorijnsmit/…
jorijnsmit

1
@ jorijnsmit, ไม่ฉันได้รับคำเตือนเดียวกัน แต่ได้ติดตั้ง TF2.1 เป็นpip install tensorflow(ในสภาพแวดล้อม pyenv / virtualenv)
lurix66

1
ใช่แน่นอน @ lurix66 2.1.0rc0รหัสที่สร้างข้อผิดพลาดนี้เป็นที่รู้จักใน
jorijnsmit

คำตอบ:


11

ดูเหมือนว่าข้อความปลอม ฉันได้รับข้อความเตือนเดียวกันหลังจากอัปเกรดเป็น TensorFlow 2.1 แต่ฉันไม่ได้ใช้ตุ้มน้ำหนักระดับใด ๆ หรือตุ้มน้ำหนักตัวอย่างเลย ฉันจะใช้ตัวสร้างที่คืน tuple เช่นนี้

return inputs, targets

และตอนนี้ฉันเพิ่งเปลี่ยนเป็นสิ่งต่อไปนี้เพื่อให้คำเตือนหายไป:

return inputs, targets, [None]

ฉันไม่รู้ว่าสิ่งนี้เกี่ยวข้องหรือไม่ แต่โมเดลของฉันใช้ 3 อินพุตดังนั้นinputsตัวแปรของฉันจึงเป็นรายการของ 3 numpy arrays targetsเป็นเพียงอาร์เรย์ numpy เดียว

ไม่ว่าในกรณีใดมันเป็นเพียงการเตือน การฝึกอบรมใช้งานได้ดีทั้งสองทาง

แก้ไขสำหรับ TensorFlow 2.2:

ข้อผิดพลาดนี้ดูเหมือนว่าได้รับการแก้ไขใน TensorFlow 2.2 ซึ่งดีมาก อย่างไรก็ตามการแก้ไขปัญหาดังกล่าวข้างต้นจะล้มเหลวใน TF 2.2 AttributeError: 'NoneType' object has no attribute 'shape'เพราะมันจะพยายามที่จะได้รับรูปร่างของน้ำหนักตัวอย่างที่เห็นได้ชัดว่าจะล้มเหลวด้วย ดังนั้นเลิกทำการแก้ไขข้างต้นเมื่ออัปเกรดเป็น 2.2


มันก็ใช้ได้กับฉันเช่นกัน
Robert Lugg

14

ผมเชื่อว่าปัญหานี้เป็นปัญหาที่มี tensorflow ที่จะเกิดขึ้นเมื่อคุณเรียกmodel.compile()ใช้พารามิเตอร์เริ่มต้นsample_weight_mode=Noneแล้วโทรmodel.fit()กับที่ระบุไว้หรือsample_weightclass_weight

จาก repos tensorflow:

  • fit() ในที่สุดก็โทร _process_training_inputs()
  • _process_training_inputs() ชุด sample_weight_modes = [None]ขึ้นอยู่กับmodel.sample_weight_mode = Noneแล้วสร้างDataAdapterด้วยsample_weight_modes = [None]
  • การDataAdapterโทรbroadcast_sample_weight_modes()ด้วยsample_weight_modes = [None]ในระหว่างการเริ่มต้น
  • broadcast_sample_weight_modes() ดูเหมือนจะคาดหวัง sample_weight_modes = Noneแต่ได้รับ[None]
  • มันอ้างว่า[None]เป็นโครงสร้างที่แตกต่างจากsample_weight/ class_weightเขียนทับมันกลับไปNoneโดยปรับให้เข้ากับโครงสร้างของsample_weight/ class_weightและส่งสัญญาณเตือน

คำเตือนกันนี้จะไม่มีผลกระทบต่อfit()ฐานะsample_weight_modesในเป็นชุดกลับไปDataAdapterNone

โปรดทราบว่าเอกสารคู่มือ tensorflow ระบุว่าsample_weightต้องเป็น numpy-array หากคุณโทรfit()ด้วยsample_weight.tolist()แทนคุณจะไม่ได้รับคำเตือน แต่sample_weightจะถูกเขียนทับอย่างเงียบ ๆNoneเมื่อ_process_numpy_inputs()ถูกเรียกในการประมวลผลล่วงหน้าและรับอินพุตที่มีความยาวมากกว่าหนึ่ง


1
คำอธิบายที่ละเอียดมากขอบคุณ สิ่งเดียวที่ฉันไม่เข้าใจก็คือคำเตือนที่อธิบายถึง...การข่มขู่[...]ในขณะที่ในกรณีของคุณ[None]ถูกข่มขู่None...
jorijnsmit

4

ฉันใช้ Gist ของคุณและติดตั้ง Tensorflow 2.0 แทน TFA และทำงานได้โดยไม่มีการเตือนใด ๆ

นี่คือส่วนสำคัญของรหัสที่สมบูรณ์ รหัสสำหรับการติดตั้ง Tensorflow แสดงอยู่ด้านล่าง:

!pip install tensorflow==2.0

ภาพหน้าจอของการดำเนินการที่ประสบความสำเร็จแสดงอยู่ด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดต:ข้อผิดพลาดนี้ได้รับการแก้ไขTensorflow Version 2.2.


5
ขอขอบคุณสำหรับการตอบสนองของคุณ. 2.1.0rc0คุณมีสิทธิที่ข้อความแจ้งเตือนที่ไม่ได้รู้จักจนกระทั่งรุ่น อย่างไรก็ตามฉันเกรงว่าคำถามของฉันจะยังคงอยู่: "การบังคับบางอย่างจากอะไร...ไปถึง['...']"
jorijnsmit

3
ผมสังเกตเห็นว่าบางสิ่งที่อาจจะเกิดขึ้นเมื่อไม่ได้ตั้งใจsample_weight_mode=Noneและtarget_structureเป็นชนิดdict, sample_weight_modesเป็นแล้ว[None]และข้อยกเว้นในที่ถูกจับเนื่องจากการbroadcast_sample_weight_modes dictสิ่งนี้ถือได้ว่าเป็นข้อผิดพลาดหรือไม่?
Franz Knülle

2
Nope คำถามเก็บรวบรวมมุมมองและ upvotes แต่ไม่มีคำตอบ
jorijnsmit

1
@gkennos: ถ้าคุณรู้สึกว่ามันเป็นข้อผิดพลาดคุณสามารถยื่นข้อบกพร่องใน Github Tensorflow Repository ได้ไหม
รองรับ Tensorflow

1
มันเป็นข้อผิดพลาดอย่างแน่นอน แต่ตอนนี้ได้รับการแก้ไขใน TensorFlow 2.2
jlh

2

แทนที่จะให้พจนานุกรม

weights = {'0': 42.0, '1': 1.0}

ฉันลองรายการ

weights = [42.0, 1.0]

และคำเตือนก็หายไป


ขอบคุณคน! ฉันพยายาม (ไม่ประสบความสำเร็จ) กับพจนานุกรม โดยใช้รายการข้อผิดพลาดได้รับการแก้ไข!
Victor Mondejar-Guerra

ในขณะที่นี่จะกำจัดข้อผิดพลาดสำหรับฉันนี้แบ่งน้ำหนักสำหรับแต่ละชั้นให้ผลลัพธ์ที่เลวร้ายยิ่งขึ้น ฉันจะตรวจสอบความสอดคล้องก่อนที่จะเปลี่ยนเป็นรายการ
CanofDrink
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.