Как сделать нейросеть, переводящую римскую систему чисел в арабскую?

import numpy as np

INPUT_DIM = 1
H_DIM = 5
OUT_DIM = 6

x = np.random.randn(INPUT_DIM)

W1 = np.random.randn(INPUT_DIM, H_DIM)
b1 = np.random.randn(H_DIM)
W2 = np.random.randn(H_DIM, OUT_DIM)
b2 = np.random.randn(OUT_DIM)

def relu(t):
    return np.maximum(t, 0)

def softmax(t):
    out = np.exp(t)
    return out / np.sum(out)

t1 = x @ W1 + b1
h1 = relu(t1)
t2 = h1 @ W2 + b2
z = softmax(t2)

У меня есть простая нейронная сеть. Я хочу подать в первый слой (x) текст, похожий на запись римских чисел. На выходе мне нужно получить запись римских чисел в арабской системе, либо определить, что это невозможно. Я встал в ступор уже на первом этапе. Как передать текст, если слой нейронной сеть принимает только числа?

Входные и выходные данные:
I         #1
V         #5
MMM       #3000
LXXX      # 80
CD        # 400
MMMCMXCIX # 3999
XXXX      #-1

Ответы (1 шт):

Автор решения: CrazyElf

Как передать текст, если слой нейронной сеть принимает только числа?

Сопоставить буквам числа. И передавать массив, в котором будут закодированные числа, либо нули, если ничего нет на этой позиции. Но удастся ли такое решить нейросетью - я не уверен.

Пусть у нас в римском числе может быть не больше 10 позиций. Отдельные буквы закодируем так:

I = 1
V = 2
X = 3
L = 4
C = 5
D = 6
M = 7

Тогда конкретные значения будут закодированы так:

I         = 1000000000 # 1
V         = 2000000000 # 5
MMM       = 7770000000 # 3000
LXXX      = 4333000000 # 80
CD        = 5600000000 # 400
MMMCMXCIX = 7775735120 # 3999
XXXX      = 3333000000 # -1

Удастся ли решить эту задачу я не знаю, но вот кодировать можно так.

→ Ссылка