สวัสดีครับคุณ @cc8 ในกรณี error แบบนี้ รบกวนคุณ cc8 นำโค้ดของคุณ cc8 ลง Kaggle Notebook หรือ Colab Notebook (ทั้งสองไม่มีค่าใช้จ่าย ใช้บริการ GPU ฟรี) แล้วแชร์เป็น public notebook ครับผม ผมจะได้ลองไล่ error ดู
จากประสบการณ์ของผมที่ debug โปรแกรมของตัวเองแทบทุกวัน (ฮา) error messages ไม่ค่อยสื่อถึงสาเหตุที่แท้จริง และจำเป็นต้องทดลองรันทีละบรรทัดเพื่อดูความผิดปกติที่แท้จริงครับ
รบกวนคุณ @neural-engineer ครับ อันนี้เป็น notebook code ที่ขอคำแนะนำครับ https://www.kaggle.com/cooncanei/train-model-unet-code
สอบถามเพิ่มเติม
- ผม pip install segmentation-models บน kaggle พอ import เกิด error https://www.kaggle.com/cooncanei/train-model-unet-pip-install-error แต่เมื่อลองบน colab สามารถ import ได้ ไม่ทราบว่าเกิดจากอะไรหรือต้องลงอะไรเพิ่มเติมบน kaggle ครับ
- การ set class weights for dice_loss ของโมเดลนี้มีหลักการกำหนดค่าอย่างไรครับ
ขอเอาคำถามง่ายๆ ก่อนนะครับ :D คำถามแรกที่ import error สามารถแก้ได้ดังนี้ครับ# import keras import tensorflow as tf import os os.environ["SM_FRAMEWORK"] = 'tf.keras' import segmentation_models as sm # no error
โดย tf.keras จะเป็น library ที่อัพเดตล่าสุดครับ ส่วน keras บน kaggle อาจจะเป็นเวอร์ชั่นที่มี conflict กับ sm พอดี (ไม่แน่ใจว่า conflict กันตรงไหน)
ซึ่งในกรณีนี้เราต้องแก้โค้ดเพิ่มเติม ทุกที่ที่เป็น keras ให้เปลี่ยนเป็น tf.keras ครับ เช่น class Dataloder(keras.utils.Sequence): --> class Dataloder(tf.keras.utils.Sequence): เป็นต้น
@cc8 ตรงที่ error แก้บรรทัดเดียวครับ
ใน class Dataset แทนที่จะ return ตัวแปร 3 ตัว ให้ return เพียงแค่ image และ mask แทนครับผม เพราะโมเดลจะไม่เข้าใจว่า pathimgID มีไว้ทำอะไรครับ
return image, mask #,pathimgID
และในกรณีที่ memory error ให้ลองลด batch_size จาก 32 ดูครับ (ผมใช้ batch_size = 4 แล้วรันได้ อาจจะลองใหญ่กว่านี้ก็ได้ครับ)
ส่วนการ set class weights ของ dice ไม่มีหลักการตายตัวครับ ถ้าเรามีความรู้ (problem/domain knowledge) ว่า class ไหนสำคัญกว่าเพื่อนอาจจะให้ weights มากหน่อยได้ หรือไม่ก็อาจต้องลองหลายรูปแบบแล้วดูว่าค่าไหนให้ validation loss ดีที่สุด ในกรณีทั่วไปถ้าไม่ต้อง set เลย (uniform weights ก็ให้ผลที่ดีระดับนึงครับ)
ขอบคุณ คุณ@neural-engineer มากๆครับ
ขอสอบถามเพิ่มเติมเกี่ยวกับการ set model segmentation ครับ คือผมลองเซ็ตค่าencoder_freeze เป็น (True , False ) แต่ยังมี non-parameter trainable เหลืออยู่ ส่วนที่ยังเหลืออยู่นี้คือพารามิเตอร์ส่วนไหนครับ ถ้าต้องการให้เป็น trainable parameter ทั้งหมด โมเดลนี้สามารถทำได้หรือไม่ อย่างไรครับ
สวัสดีครับคุณ @cc8
ถ้าเรา set encoder_freeze=False เราจะได้ parameters เกือบทั้งหมด train ได้ดังนี้ครับ
Total params: 23,754,013 Trainable params: 23,749,981 Non-trainable params: 4,032
ส่วน 4032 parameters ที่เหลือน่าจะมาจากส่วน Batchnormalization Layer ที่จะมีการคำนวน Mean/Standard deviation อัตโนมัติ ซึ่งเนื่องจากถูกกำหนดสูตรไว้ชัดเจนแล้ว จึงจะไม่มีการเทรนเพิ่มเติมครับ
สวัสดีครับคุณ @neural-engineer
ผม import segmentation- models ตามคำแนะนำด้วย tf.keras แต่ไม่สามารถ train model ได้ ตามนี้ครับ https://www.kaggle.com/cooncanei/model-with-tf-kras/data ขอรบกวนช่วยดูให้หน่อยครับ ขอบคุณครับ