Обучите простую RNN из карты значений T/F и ключей битовой строки в pytorch
Я хочу обучить сеть rnn, которая сможет идентифицировать следующее: у меня есть язык L, состоящий из строк битов (может иметь длину n>20), каждая строка битов, которая в языке соответствует шаблону языка (что не является актуально на данный момент).
Я создал набор данных, который похож на карту с битовыми строками в качестве ключей и True / False в качестве значений:
001101000010010, False
111001001000000, False
111011101001100, False
011111000101101, False
10000110000110001100, True
011100100001010, False
....
Я попытался создать сеть rnn в pytorch:
class myDataset(T.utils.data.Dataset):
def __init__(self, src_file, m_rows=None):
tmp_x = np.loadtxt(src_file, max_rows=m_rows,
usecols=[0], delimiter=",", skiprows=0, dtype=np.int64)
tmp_y = np.genfromtxt(src_file, max_rows=m_rows,
usecols=[1], delimiter=",", dtype=bool)
tmp_y = tmp_y.reshape(-1, 1) # 2-D required
self.x_data = T.from_numpy(tmp_x).to(device)
self.y_data = T.from_numpy(tmp_y).to(device)
def __len__(self):
return len(self.x_data)
def __getitem__(self, idx):
preds = self.x_data[idx, :] # or just [idx]
val = self.y_data[idx, :]
return (preds, val) # tuple of two matrices
и тренируем его:
net.train() # set mode
for epoch in range(0, max_epochs):
T.manual_seed(1 + epoch) # recovery reproducibility
epoch_loss = 0 # for one full epoch
for (batch_idx, batch) in enumerate(train_ldr):
(X, Y) = batch # (predictors, targets)
optimizer.zero_grad() # prepare gradients
oupt = net(X) # predicted prices
loss_val = loss_func(oupt, Y) # avg per item in batch
epoch_loss += loss_val.item() # accumulate avgs
loss_val.backward() # compute gradients
optimizer.step() # update wts
но я получаю ошибку при загрузке данных:
OverflowError: Python int слишком велик для преобразования в C long