示例#1
0
文件: test.py 项目: Mo-Kanya/NN4SOH
    valid_set.append(data_set[v])
for t in np.random.randint(0, 450, 30):
    test_set.append(data_set[t])

sequence_length = 401
input_size = 3
hidden_size = 16
num_layers = 1
batch_size = 1
num_epochs = 2
learning_rate = 0.0001

for ktr in range(1):
    rnn = BiLSTM(input_size, hidden_size, num_layers, 1)
    criterion = nn.MSELoss()
    optimizer = torch.optim.Adam(rnn.parameters(), lr=learning_rate)
    losses = []
    ktr_in = 0
    for epoch in range(num_epochs):
        for img, lb in train_set:
            img = np.array([
                img,
            ], dtype=np.float)
            img = torch.FloatTensor(img)
            img = Variable(img)  # .cuda()

            # Forward + Backward + Optimize
            optimizer.zero_grad()
            output = rnn(img)
            loss = criterion(
                output, torch.FloatTensor(np.array([
示例#2
0
文件: train.py 项目: hlr7999/ML
    train = True,
    transform = torchvision.transforms.ToTensor(),
    download = DOWNLOAD_MNIST,
)
test_data = dsets.MNIST(root='../LSTM/mnist', train=False)

train_loader = Data.DataLoader(dataset=train_data, \
    batch_size=BATCH_SIZE, shuffle=True)

with torch.no_grad():
    test_x = Variable(torch.unsqueeze(test_data.data, dim=1)).type(torch.FloatTensor)/255
test_y = test_data.targets

lstm = BiLSTM(INPUT_SIZE, HIDDEN_SIZE, NUM_LAYERS, 10).to(device)

optimizer = torch.optim.Adam(lstm.parameters(), lr=LR)
loss_func = nn.CrossEntropyLoss()

for epoch in range(EPOCH):
    for step, (x, y) in enumerate(train_loader):
        b_x = Variable(x.view(-1, TIME_STEP, INPUT_SIZE).to(device))
        b_y = Variable(y.to(device))
 
        output = lstm(b_x)
        loss = loss_func(output, b_y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
 
        if step%50 == 0:
            test_output = lstm(test_x.view(-1, TIME_STEP, INPUT_SIZE).to(device))
示例#3
0
def main(config):
    trainDataPath = config['data']['trainDataPath']
    validDataPath = config['data']['validDataPath']
    testDataPath = config['data']['testDataPath']

    modelName = config['modelName']

    batchSize = config['model']['batchSize']
    epochNum = config['model']['epochNum']
    earlyStop = config['model']['earlyStop']
    learningRate = config['model']['learningRate']
    modelSavePath = config['model']['modelSavePath']

    #GPU/CPU
    DEVICE = config['DEVICE']

    trianDataset = NERDataset(trainDataPath, config)
    validDataset = NERDataset(validDataPath, config)
    testDataset = NERDataset(testDataPath, config)

    trainIter = data.DataLoader(dataset=trianDataset,
                                batch_size=batchSize,
                                shuffle=True,
                                num_workers=4,
                                collate_fn=pad)

    validIter = data.DataLoader(dataset=validDataset,
                                batch_size=batchSize,
                                shuffle=False,
                                num_workers=4,
                                collate_fn=pad)

    testIter = data.DataLoader(dataset=testDataset,
                               batch_size=batchSize,
                               shuffle=False,
                               num_workers=4,
                               collate_fn=pad)

    if modelName == 'bilstm':
        net = BiLSTM(config)
        train = bilstmTrain
        eval = bilstmEval
        if torch.cuda.device_count() > 1:
            net = nn.DataParallel(net)

    if modelName == 'bilstm_crf':
        net = BiLSTM_CRF(config)
        train = bilstmCRFTrain
        eval = bilstmCRFEval

    if modelName == 'transformer_crf':
        net = Transformer_CRF(config)
        train = transformerCRFTrain
        eval = transformerCRFEval

    if modelName == 'cnn':
        net = CNN(config)
        train = cnnTrain
        eval = cnnEval

    net = net.to(DEVICE)

    lossFunction = nn.NLLLoss()
    optimizer = optim.Adam(net.parameters(),
                           lr=learningRate,
                           betas=(0.9, 0.999),
                           eps=1e-08)

    earlyNumber, beforeLoss, maxScore = 0, sys.maxsize, -1

    #开始训练
    for epoch in range(epochNum):

        print('第%d次迭代: ' % epoch)

        totalLoss = train(net,
                          trainIter,
                          optimizer=optimizer,
                          criterion=lossFunction,
                          DEVICE=DEVICE)
        print('训练损失为: %f' % totalLoss)

        totalLoss, f1Score = eval(net,
                                  validIter,
                                  criterion=lossFunction,
                                  DEVICE=DEVICE)

        if f1Score > maxScore:
            maxScore = f1Score
            torch.save(net.state_dict(), modelSavePath)

        print('验证损失为:%f   f1Score:%f / %f' % (totalLoss, f1Score, maxScore))

        if f1Score < maxScore:
            earlyNumber += 1
            print('earyStop: %d/%d' % (earlyNumber, earlyStop))
        else:
            earlyNumber = 0
        if earlyNumber >= earlyStop: break
        print('\n')

    #加载最优模型
    net.load_state_dict(torch.load(modelSavePath))
    totalLoss, f1Score = eval(net,
                              testIter,
                              criterion=lossFunction,
                              DEVICE=DEVICE)
    print('测试损失为: %f, f1Score: %f' % (totalLoss, f1Score))
示例#4
0
try:
    for Ques_train, Ques_test in kf.split(Dataset):

        count += 1
        print("Fold ", count)
        if count == 2:
            #writeContentEmbeddings(model)
            break
        # define model
        model = BiLSTM(embedding_dim=EMBEDDING_DIM, hidden_dim=HIDDEN_DIM, vocab_size=len(text_field.vocab), label_size=len(label_field.vocab)-1,\
                              use_gpu=USE_GPU, batch_size=BATCH_SIZE)
        if USE_GPU:
            model = model.to(DEVICE)
        model.embeddings.weight.data.copy_(
            torch.from_numpy(pretrained_embeddings))
        optimizer = optim.Adam(model.parameters(), lr=1e-3)

        trainset = torch.utils.data.TensorDataset(
            torch.LongTensor(Dataset[Ques_train]),
            torch.torch.LongTensor(Dataset[Ques_train]))
        testset = torch.utils.data.TensorDataset(
            torch.LongTensor(Dataset[Ques_test]),
            torch.torch.LongTensor(Dataset[Ques_test]))

        train_loader = torch.utils.data.DataLoader(dataset=trainset,
                                                   batch_size=64)

        test_loader = torch.utils.data.DataLoader(dataset=testset,
                                                  batch_size=BATCH_SIZE,
                                                  shuffle=False)