รับรู้ตัวเลขที่เขียนด้วยลายมือ


22

งานของคุณคือการอ่านภาพที่มีตัวเลขที่เขียนด้วยลายมือรู้จักและพิมพ์ตัวเลข

อินพุต:รูปภาพระดับสีเทาขนาด 28 * 28 ที่กำหนดเป็นลำดับตัวเลข 784 ข้อความธรรมดาตั้งแต่ 0 ถึง 255 โดยคั่นด้วยช่องว่าง 0 หมายถึงสีขาวและ 255 หมายถึงสีดำ

ผลลัพธ์:ตัวเลขที่รู้จัก

การให้คะแนน:ฉันจะทดสอบโปรแกรมของคุณด้วย 1,000 ภาพจากชุดฝึกอบรมฐานข้อมูล MNIST (แปลงเป็นรูปแบบ ASCII) ฉันเลือกภาพแล้ว (สุ่ม) แต่จะไม่เผยแพร่รายการ การทดสอบจะต้องเสร็จสิ้นภายใน 1 ชั่วโมงและจะกำหนดn- จำนวนคำตอบที่ถูกต้อง
nต้องมีอย่างน้อย 200 เพื่อให้โปรแกรมของคุณมีคุณสมบัติ ถ้าขนาดของรหัสที่มาของคุณเป็นแล้วคะแนนของคุณจะถูกคำนวณเป็นs s * (1200 - n) / 1000คะแนนต่ำสุดชนะ

กฎ:

  • โปรแกรมของคุณจะต้องอ่านภาพจากอินพุตมาตรฐานและเขียนตัวเลขลงในเอาต์พุตมาตรฐาน
  • ไม่มีฟังก์ชั่น OCR ในตัว
  • ไม่มีห้องสมุดบุคคลที่สาม
  • ไม่มีทรัพยากรภายนอก (ไฟล์โปรแกรมเว็บไซต์)
  • โปรแกรมของคุณต้องสามารถรันได้ใน Linux โดยใช้ซอฟต์แวร์ที่มีให้ใช้งานฟรี (Wine เป็นที่ยอมรับหากจำเป็น)
  • ซอร์สโค้ดต้องใช้อักขระ ASCII เท่านั้น
  • กรุณาโพสต์คะแนนโดยประมาณของคุณและหมายเลขรุ่นที่ไม่ซ้ำกันทุกครั้งที่คุณแก้ไขคำตอบของคุณ

อินพุตตัวอย่าง:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253 253 207 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253 201 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

อย่างไรก็ตามถ้าคุณเพิ่มบรรทัดนี้ลงในอินพุต:

P2 28 28 255

คุณจะได้รับไฟล์ภาพที่ถูกต้องในรูปแบบ pgm โดยมีสีคว่ำ / ลบล้าง

นี่คือลักษณะที่ปรากฏด้วยสีที่ถูกต้อง: หลัก

ตัวอย่างผลลัพธ์:

5

ตารางคะแนน:

No.| Name         | Language   | Alg | Ver | n   | s   |  Score
----------------------------------------------------------------
 1 | Peter Taylor | GolfScript | 6D  | v2  | 567 | 101 |  63.933
 2 | Peter Taylor | GolfScript | 3x3 | v1  | 414 | 207 | 162.702

ที่เกี่ยวข้อง แต่ไม่มากเหมือนกัน (ไม่ได้เป็นความท้าทาย แต่มีประโยชน์มากสำหรับการค้นหารหัสน้ำยาง): detexify.kirelabs.org/classify.html นอกจากนี้ยังรับรู้ตัวเลข
Justin

1
เราสามารถคิดได้อย่างปลอดภัยหรือไม่ว่าเราเพียง แต่ต้องพิจารณาพิกเซลสีดำ > 127 พิกเซล? เราคิดอะไรได้บ้าง
Justin

2
โดยเฉพาะอย่างยิ่งหากนี่เป็นคำถามเกี่ยวกับการเล่นกอล์ฟกรุณา จำกัด อินพุตเป็นขาวดำ คนทำให้อาชีพทั้งหมดของพวกเขาออกจากการแก้ปัญหานี้โดยไม่ต้องนับตัวอักษรในรหัสของพวกเขา การไม่เผยแพร่ตัวละครที่คุณเลือกเป็นวิธีหยุดการโกงและทำให้มันเป็นการพนัน ... และเนื่องจากมันไม่มีเหตุผลสำหรับคนที่จะเขียน AI ที่นี่ความสนุกกำลังทำไปแล้ว มันทำในทัวร์นาเมนท์กับการแข่งขัน
ดร. Rebmu

3
@aditsu ใช่ใคร ๆก็ทำได้ไม่ดี แต่คุณไม่ได้ขอให้ทำไม่ดีคุณต้องการให้ใครบางคน "ชนะ" ในการแข่งขันโดยวัดจำนวนตัวละคร ฉันคิดว่าการตัดปัญหาลงเล็กน้อยมีความเป็นจริงมากขึ้นสำหรับนักแก้ไขปริศนามือสมัครเล่น การป้อนข้อมูลที่ จำกัด ดูเหมือนว่าเป็นการเริ่มต้นที่ดีในการทำให้มีเหตุผล ฉันขอแนะนำ pre-pass บนอินพุตเพื่อบอกว่าเป็นขาวดำ
ดร. Rebmu

2
@ Dr.Rebmu และใครก็ตามที่ต้องการอินพุตขาวดำ: อย่าลังเลที่จะแปลงอินพุตโดยใช้เก ​​ณ ฑ์เช่น 128 ฉันได้ตรวจสอบและตัวเลขยังคงเป็นที่รู้จัก (โดยสมองของฉัน) คุณสามารถลองใช้เกณฑ์อื่น ๆ เช่นกันพวกเขาอาจให้ผลลัพธ์ที่ดีกว่า
aditsu

คำตอบ:


6

GolfScript 6D (v2: คะแนนโดยประมาณ 101 * 0.63 ~ = 64)

นี่เป็นวิธีที่แตกต่างกันมากสำหรับคำตอบ GolfScript ก่อนหน้าของฉันดังนั้นจึงเหมาะสมกว่าที่จะโพสต์เป็นคำตอบที่แยกต่างหากที่ v1 แทนที่จะแก้ไขคำตอบอื่นและทำให้ v2 นี้

~]:B;569'!EM,R.==|%NL2+^=1'{{32-}%95{base}:^~\^}:&~2/{~B=<}%2^10'#]8Y,;KiZfnnRsDzPsvQ!%4C&..z,g,$m'&=

Ungolfed

~]:B;
[30 183 21 378 31 381 7 461 113 543 15 568]
2/{~B=<}%2base
7060456576664262556515119565486100005262700292623582181233639882 10base
=

คำอธิบาย

ปัญหาดิบคือการจำแนกคะแนนในพื้นที่มิติ 784 วิธีการมาตรฐานหนึ่งคือการลดขนาด: การระบุส่วนย่อยขนาดเล็กซึ่งให้พลังงานที่แตกต่างเพียงพอที่จะทำการจำแนก ฉันประเมินแต่ละมิติและแต่ละเกณฑ์ที่เป็นไปได้เพื่อระบุ 18 คู่ (มิติช่วงของเกณฑ์) ซึ่งดูมีแนวโน้ม ฉันเลือกจุดศูนย์กลางของแต่ละช่วงของเกณฑ์แล้วประเมิน 6 ชุดย่อยของ 18 คู่ ในที่สุดฉันก็ปรับเกณฑ์สำหรับแต่ละมิติของการฉายภาพ 6 มิติที่ดีที่สุดเพิ่มความแม่นยำจาก 56.3% เป็น 56.6%

เนื่องจากการฉายภาพออกเป็น 6 มิติและสำหรับแต่ละมิติที่ฉันใช้เกณฑ์ง่ายตารางการค้นหาสุดท้ายจึงต้องการเพียง 64 องค์ประกอบเท่านั้น ดูเหมือนจะไม่สามารถบีบอัดได้เป็นพิเศษดังนั้นการเล่นกอล์ฟหลักคือการแปลงทั้งตารางการค้นหาพื้นฐาน (รายการของมิติข้อมูลและขีด จำกัด และเวกเตอร์ halfspace เป็นแผนที่หลัก) และแบ่งปันรหัสการแปลงฐาน


7
คุณสูญเสียฉันไปที่ "784-space space" ;-)
Digital Trauma

ฉันกลัวว่ามีข้อผิดพลาดอยู่ที่ไหนสักแห่งฉันจะได้คำตอบที่ถูกต้อง 37 ข้อเท่านั้น นอกจากนี้คุณกำลังทำสิ่งที่คลุมเครือเล็กน้อยคุณช่วยเพิ่ม (1) และ (2) (เช่นฉัน) หรือสิ่งที่คล้ายกับส่วนหัวของคุณได้ไหม
aditsu

@aditsu ข้อผิดพลาดทางตรรกะอย่างง่าย แก้ไขแล้ว
Peter Taylor

โดยพื้นฐานแล้วคุณกำลังสุ่มตัวอย่าง 6 "พิกเซล" ที่เกี่ยวข้องแต่ละอันมีเกณฑ์แตกต่างกันรับ 6 บิตหรือไม่
aditsu

@aditsu แน่นอน
Peter Taylor

5

GolfScript 3x3 (v1: คะแนนโดยประมาณ 207 * 0.8 ~ = 166)

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'"yN(YZ5B 7k{&w,M`f>wMb>}F2A#.{E6T9kNP_s 3Q?V`;Z\'C-z*kA5M@?l=^3ASH/@*@HeI@A<^)YN_bDI^hgD>jI"OUWiGct%7/U($*;h*<"r@xdTz6x~,/M:gT|\\:#cII8[lBr<%0r&y4'{32-}%95^?^2/{))*~}%=

หรือในภาพรวม

~]28/10:?/{zip?/{[]*0-!!}/}%2{base}:^~'MAGIC STRING'{32-}%95^?^2/{))*~}%=

คำอธิบาย

วิธีการของฉันในระดับสูงคือ:

  1. กำหนดพิกเซล: หากพิกเซลอยู่เหนือt1จากนั้นตั้งค่าเป็น1; 0มิฉะนั้นจะ
  2. จัดกลุ่มพิกเซล ตอนแรกฉันแบ่งตาราง 28x28 ลงในตาราง 4x4 (แต่ละ subgrid เป็น 7x7 พิกเซล); แต่แบ่งออกเป็นกริด 3x3 (subgrids ที่มีขนาด 10x10, 10x8 หรือ 8x8 พิกเซล) ให้ขนาดตารางการค้นหาลดลงอย่างมากในขณะที่อัตราความถูกต้องลดลงจาก 56% เหลือประมาณ 40%
  3. รวมจำนวนพิกเซลในแต่ละกลุ่มและขีด จำกัด อีกครั้ง: หากจำนวนพิกเซลที่ตั้งไว้สูงกว่าt2จะให้คะแนนกลุ่มเป็น1; 0อีกนัยหนึ่งว่า
  4. ทำการค้นหาตารางโดยใช้เวกเตอร์ของคะแนนกลุ่ม (ตารางถูกบีบอัดโดยใช้การเข้ารหัสความยาวรันไทม์และเคล็ดลับการแปลงฐานมาตรฐานตัวเลือกส่วนใหญ่t1และt2อยู่ระหว่าง 50% ถึง 63% ของตารางเป็นค่า "ไม่สนใจ" ซึ่งสามารถรวมกับค่าที่อยู่ติดกันเพื่อเพิ่ม run lengths ความยาว run เฉลี่ยในตาราง v1 ของฉันคือ 3.6)

ปรากฎว่าการตั้งค่าt1=t2=0นั้นแม้จะไม่เหมาะสม แต่อยู่ไม่ไกลจากค่าที่ดีที่สุดt1และt2ในแง่ของความแม่นยำ ค่อนข้างดีในแง่ของการบีบอัดตาราง และอนุญาตให้ฉันรวมการดำเนินการ thresholding สองรายการเข้าด้วยกัน[]*0-!!(อาเรย์แบบสองมิติแบนไปที่ 1D; ลบ0s; ตรวจสอบว่ามันว่างเปล่า)

ตารางการค้นหาให้ผู้สมัครที่มีโอกาสมากที่สุดสำหรับเวกเตอร์ของคะแนนกลุ่ม มันอาจจะเป็นไปได้ที่จะปรับปรุงคะแนนโดยการระบุรายการตารางซึ่งสามารถเปลี่ยนแปลงได้เช่นการปรับปรุงการบีบอัดของตารางที่มีค่ามากกว่าความถูกต้องลดลง


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