UPDATE:
การนำMSEดั้งเดิมไปใช้จะมีลักษณะดังนี้:
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(y_pred - y_true), axis=-1)
ฉันคิดว่าฟังก์ชั่นการสูญเสีย maximizer ที่ถูกต้อง:
def mean_squared_error_max(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(1 / (y_pred - y_true)), axis=-1)
วิธีนี้เราจะได้ค่าการสูญเสียที่เป็นบวกเสมอเช่นในกรณีของฟังก์ชัน MSE แต่มีผลกลับด้าน
การปรับปรุง 2:
เริ่มแรกฉันเขียนว่าความคิดแรกที่เข้าใจง่ายที่จะลบล้างการสูญเสียจะไม่ให้ผลลัพธ์ที่เราคาดไว้เนื่องจากแนวคิดพื้นฐานของวิธีการปรับให้เหมาะสม (คุณสามารถอ่านการอภิปรายที่น่าสนใจได้ที่นี่ ) หลังจากฉันตรวจสอบทั้งสองวิธีแล้วให้ผลในงานการเรียนรู้เฉพาะ (หมายเหตุ: ฉันไม่ได้ทำแบบทดสอบหมด) คือทั้งสองวิธีให้การสูญเสียสูงสุดแม้ว่า-loss
วิธีการจะแปรผันได้เร็วขึ้นเล็กน้อย ผมไม่แน่ใจว่ามันมักจะให้ทางออกที่ดีที่สุดหรือวิธีการแก้ปัญหาใด ๆ เพราะการออกไปได้อธิบายไว้ที่นี่ หากใครมีประสบการณ์อื่นโปรดแจ้งให้เราทราบ
ดังนั้นหากใครต้องการลองทำ-loss
เช่นกัน:
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return - K.mean(K.square(y_pred - y_true), axis=-1)
รายละเอียดเพิ่มเติม:
OP เขียนว่า:
ฉันมีเครือข่ายผู้ให้กำเนิดที่ไม่เห็นด้วยซึ่งผู้ที่เลือกปฏิบัติได้รับการย่อให้เล็กสุดด้วย MSE และเครื่องกำเนิดควรได้รับการขยายให้ใหญ่สุด เพราะทั้งคู่เป็นคู่ต่อสู้ที่ไล่ตามเป้าหมายตรงกันข้าม
จากลิงค์ที่จัดทำโดย Ibragil:
ในขณะเดียวกันเครื่องกำเนิดไฟฟ้ากำลังสร้างภาพสังเคราะห์ใหม่ที่จะส่งผ่านไปยังผู้เลือกปฏิบัติ ด้วยความหวังว่าพวกเขาก็จะถูกมองว่าเป็นของแท้แม้ว่าพวกเขาจะเป็นของปลอมก็ตาม เป้าหมายของเครื่องกำเนิดไฟฟ้าคือการสร้างตัวเลขที่เขียนด้วยมือที่เขียนได้: นอนโดยไม่ถูกจับ เป้าหมายของการเลือกปฏิบัติคือการระบุภาพที่มาจากเครื่องกำเนิดเป็นของปลอม
ดังนั้นนี่เป็นปัญหาที่ไม่ดี:
ในGANเป้าหมายสุดท้ายของเราในการฝึกอบรมของเราสองเคาน์เตอร์ฝ่ายdiscriminatorและเครื่องกำเนิดไฟฟ้าในการดำเนินการที่ดีที่สุดเท่าที่เป็นไปได้กับแต่ละอื่น ๆ มันหมายความว่าการเรียนรู้พื้นฐานทั้งสองมีหน้าที่แตกต่างกัน แต่ฟังก์ชั่นการสูญเสียที่พวกเขาสามารถบรรลุการแก้ปัญหาที่ดีที่สุดคือเช่นเดียวกันbinary_crossentropy
ดังนั้นงานของแบบจำลองเพื่อลดการสูญเสียนี้
discriminatorรูปแบบวิธีการรวบรวม:
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)
กำเนิดรูปแบบวิธีการรวบรวม:
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)
มันเหมือนกับเป้าหมายของนักวิ่งสองคนที่จะลดเวลาในการไปถึงเส้นชัยเพื่อให้พวกเขาเป็นคู่แข่งในงานนี้
ดังนั้น "เป้าหมายตรงกันข้าม" ไม่ได้หมายถึงภารกิจตรงข้ามนั่นคือลดการสูญเสีย (เช่นการลดเวลาในตัวอย่างของนักวิ่ง)
ฉันหวังว่ามันจะช่วย