0

我想训练能够识别以下内容的 rnn 网络:我有一个由位串(长度可以是 n>20)组成的语言 L,该语言中的每个位串都满足语言的模式(不是目前相关)。

我创建了一个数据集,它就像一个以位串为键、真/假为值的地图:

001101000010010, False
111001001000000, False
111011101001100, False
011111000101101, False
10000110000110001100, True
011100100001010, False
....

我试图在 pytorch 中创建 rnn 网络:

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

但加载数据时出现错误:

溢出错误:Python int 太大而无法转换为 C long

4

0 回答 0