예제 #1
0
def main():
    root = "/home/fanyang/PycharmProjects/SignLanguage/data/tctodd"
    id_sign, sign_id = id_2_sign(root)

    train_samples, dev_samples = load_dataset(root, sign_id, hold_id=8)

    train_dataset = SignLangDataset(sample_list=train_samples)
    dev_dateset = SignLangDataset(sample_list=dev_samples)

    # model

    model = SimpleNN1DCNN()
    model.load_state_dict(
        torch.load('/home/fanyang/PycharmProjects/SignLanguage/ckpt/model.pkl'))
    model.cuda()
    for param in model.parameters():
        param.requires_grad = False

    vis = visdom.Visdom()
    min_val, max_val = get_min_max_from_dataset(train_dataset)
    # min: -0.4535120129585266, max: 1.0
    print("min:{}, max:{}".format(min_val, max_val))
    # exit()
    vis.heatmap(X=train_dataset[0][0], opts={'xmin': min_val, 'xmax': max_val})

    # [22, 90] label :0
    inputs = Variable(torch.randn(1, 1, 22, 90), requires_grad=True).cuda()
    nn.init.normal(inputs, std=.001)

    inputs._grad_fn = None

    model.optimizer = optim.SGD(params=[inputs], lr=1e-4)

    for i in count():
        logits = model(inputs)
        logits = torch.squeeze(logits)
        model.optimizer.zero_grad()
        logits[0].backward(torch.FloatTensor([-1.]).cuda())
        model.optimizer.step()
        if (i + 1) % 50000 == 0:
            vis.heatmap(X=torch.squeeze(inputs).cpu().data,
                        opts={'xmin': min_val, 'xmax': max_val,
                              'title': '%d-step' % (i + 1)})
            print("step:%d" % (i + 1), "prob:%.7f" %
                  F.softmax(logits)[0].cpu().data.numpy()[0])
            adjust_learning_rate(model.optimizer)