ฉันมีปัญหากับโมเดล seq2seq ของฉันในบางกรณี มันก็ใช้ได้ดี แต่ในบางกรณีก็ส่งคืนเป็นผลให้มีเพียงโทเค็นสุดท้ายเท่านั้น
ตัวอย่างเช่น :
For given vector :
[2, #start token
3,
123,
1548, #end token
1548,
1548,
1548,
1548,
1548,
1548]
The model predict :
[1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548,
1548]
ฉันพยายามใช้การโทรกลับ SaveModel จาก keras ที่ติดตาม "การสูญเสีย" แต่ก็ยังให้ผลลัพธ์เหมือนเดิม
ฉันก็เลยคิดว่าบางทีฉันควรใช้ฟังก์ชันการสูญเสียของตัวเอง
ฟังก์ชั่นการสูญเสียอย่างง่ายที่ keras จัดให้:
def mean_absolute_error(y_true, y_pred):
return K.mean(K.abs(y_pred - y_true), axis=-1)
ทั้ง y_true และ y_pred เป็นวัตถุ tensorflow (เราได้รับเพียงตัวชี้ไปยังอาเรย์จริง) ดังนั้น .. เพื่อสร้างตรรกะบางอย่าง เราจำเป็นต้องรับอาเรย์จาก gpu หรืออัปโหลดอาเรย์ของตัวเองไปยัง gpu ..
ฟังก์ชั่นการสูญเสียที่ฉันต้องการ
def mean_absolute_error(y_true, y_pred):
sum = 0
for y , _y in zip(y_true , y_pred):
if (y == _y) and (y == self.startToken or y == self.endToken):
continue
else:
sum += abs(y - _y)
return sum
ฉันพยายามใช้ y_true.eval() ซึ่งควรนำอาร์เรย์เป็นวัตถุ numpy ไปยัง cpu (ไม่สามารถประเมินเทนเซอร์โดยใช้ eval()
: ไม่มีการลงทะเบียนเซสชันเริ่มต้น)
และฉันไม่สามารถหาวิธีอัปโหลดอาร์เรย์ของตัวเองลงในเทนเซอร์โฟลว์ได้
หากคุณมีวิธีแก้ปัญหาหรือข้อเสนอแนะใด ๆ ฉันยินดีอย่างยิ่งที่จะได้ยินเกี่ยวกับเรื่องนี้
ขอบคุณ..
(ไม่ได้สำคัญมากแต่...)
โมเดลอิงจาก: https://blog.keras.io/a-ten-minutes-introduction-to-sequence-to-sequence-learning-in-keras.html แต่ด้วย one-hot(two dim [Matrix] ) เอาท์พุท
decode_sequence
:# Exit condition: either hit max length or find stop character.
พวกเขายังเติมอาร์เรย์เอาต์พุตของโมเดลไว้ล่วงหน้าด้วยอักขระเริ่มต้น:# Populate the first character of target sequence with the start character.
ฉันสงสัยว่าคุณกำลังใช้ฟังก์ชันที่คล้ายกับฟังก์ชันdecode_sequence
หรือไม่ - person vasilyrud   schedule 26.03.2018decode_sequence
ของมันทุกประการ และดูว่าได้ผลก่อนหรือไม่ อาจเป็นวิธีเดียวที่จะทำนายแบบ seq-to-seq ใน Keras - person vasilyrud   schedule 26.03.2018