Su tarea es leer una imagen que contenga un dígito escrito a mano, reconocer e imprimir el dígito.
Entrada: una imagen en escala de grises de 28 * 28, dada como una secuencia de 784 números de texto sin formato del 0 al 255, separados por espacio. 0 significa blanco y 255 significa negro.
Salida: el dígito reconocido.
Puntuación: Probaré su programa con 1000 de las imágenes del conjunto de entrenamiento de la base de datos MNIST (convertido a formato ASCII). Ya he seleccionado las imágenes (al azar), pero no publicaré la lista. La prueba debe finalizar dentro de 1 hora y determinará n
la cantidad de respuestas correctas.
n
debe ser de al menos 200 para que su programa califique. Si el tamaño de su código fuente es s
, entonces su puntaje se calculará como s * (1200 - n) / 1000
. La puntuación más baja gana.
Reglas:
- Su programa debe leer la imagen de la entrada estándar y escribir el dígito en la salida estándar
- Sin función OCR incorporada
- No hay bibliotecas de terceros.
- Sin recursos externos (archivos, programas, sitios web)
- Su programa debe ser ejecutable en Linux utilizando software disponible gratuitamente (Wine es aceptable si es necesario)
- El código fuente debe usar solo caracteres ASCII
- Publique su puntaje estimado y un número de versión único cada vez que modifique su respuesta
Entrada de ejemplo:
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
Por cierto, si antepone esta línea a la entrada:
P2 28 28 255
obtendrá un archivo de imagen válido en formato pgm, con colores invertidos / negados.
Así es como se ve con los colores correctos:
Salida de ejemplo:
5
Posiciones:
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
Respuestas:
GolfScript 6D (v2: puntaje estimado 101 * 0.63 ~ = 64)
Este es un enfoque muy diferente a mi respuesta anterior de GolfScript, por lo que tiene más sentido publicarlo como una respuesta separada en v1 que editar la otra respuesta y hacer esta v2.
Sin golf
Explicación
El problema en bruto es la clasificación de puntos en un espacio de 784 dimensiones. Un enfoque estándar es la reducción de dimensiones: identificar un pequeño subconjunto de dimensiones que proporcionan suficiente poder de distinción para hacer la clasificación. Evalué cada dimensión y cada umbral posible para identificar 18 pares de (dimensión, rango de umbral) que parecían prometedores. Luego elegí el centro de cada rango de umbral y evalué los subconjuntos de 6 elementos de los 18 pares. Finalmente, optimicé el umbral para cada dimensión de la mejor proyección 6-D, mejorando su precisión del 56,3% al 56,6%.
Debido a que la proyección está en 6 dimensiones y para cada dimensión aplico un umbral simple, la tabla de búsqueda final solo necesita 64 elementos. No parece ser particularmente compresible, por lo que el golf principal es convertir ambas tablas de búsqueda (la lista de dimensiones y umbrales; y el vector de medio espacio en el mapa de dígitos) y compartir el código de conversión de base.
fuente
GolfScript 3x3 (v1: puntaje estimado 207 * 0.8 ~ = 166)
O en resumen,
Explicación
Mi enfoque a un alto nivel es:
t1
, configúrelo en1
; de lo contrario a0
.t2
, califique el grupo como1
; de lo contrario como0
.t1
yt2
dejan entre el 50% y el 63% de la tabla como valores de "no importa", que se pueden combinar con valores adyacentes para aumentar longitudes de ejecución; la longitud promedio de ejecución en mi tabla v1 es 3.6).Resulta que esa configuración
t1=t2=0
, aunque no es óptima, no está muy lejos de los mejores valores det1
yt2
en términos de precisión; es bastante bueno en términos de compresibilidad de la tabla; y me permite combinar las dos operaciones de umbral en[]*0-!!
(aplanar matriz 2D a 1D; eliminar0
s; verificar si está vacío).La tabla de búsqueda proporciona el candidato más probable para el vector dado de puntajes de grupo. Es muy posible mejorar la puntuación identificando las entradas de la tabla que se pueden cambiar de modo que la compresibilidad mejorada de la tabla supere la precisión disminuida.
fuente