def lstm(): maxlen = 50 X, Y, Z = gettuple() print(len(X), len(Y), len(Z)) print('begin') nbatch = 64 outdim = 3 args = { 'emb_size': 300, 'hidden_size': 128, 'num_layers': 2, 'dropout': 0.5 } BATCH_SIZE = 1 model = SeqLSTMClassify(args, outdim) for i in range(0, len(X), nbatch): up = min(len(X), i + nbatch) seq_tensor1, y1, seq_lengths1, perm_idx1 = embed_and_pad( X[i:up], Z[i:up], maxlen, 'int') seq_tensor2, y2, seq_lengths2, perm_idx2 = embed_and_pad( Y[i:up], Z[i:up], maxlen, 'int') loss = model.learn_once( ((seq_tensor1, seq_lengths1), (seq_tensor2, seq_lengths2)), y1) print(loss.data.cpu().numpy())
def train(x, y, maxlen, EPOCH=1): outdim = 2 args = { 'emb_size': 300, 'hidden_size': 128, 'num_layers': 2, 'dropout': 0.5 } BATCH_SIZE = 1 model = SeqLSTMClassify(args, outdim) for epoch in range(EPOCH): idx = np.arange(len(x), dtype=int) np.random.shuffle(idx) for i in range(0, len(x), BATCH_SIZE): print(i) seq_tensor, y, seq_lengths, perm_idx = embed_and_pad( x[idx[i:i + BATCH_SIZE]], y[idx[i:i + BATCH_SIZE]], maxlen) loss = model.learn_once((seq_tensor, seq_lengths), y) print(loss.data.cpu().numpy()) return model
def predict(df, model): seq_tensor, y, seq_lengths, perm_idx = embed_and_pad( df, np.arange(len(df.index))) return model.predict((seq_tensor, seq_lengths), y, perm_idx)
def eval(x, y, maxlen, model): seq_tensor, y, seq_lengths, perm_idx = embed_and_pad(x, y, maxlen) loss = model.learn_once((seq_tensor, seq_lengths), y) print(loss.data.cpu().numpy()) return loss.data.cpu().numpy()
def eval(df, model): seq_tensor, y, seq_lengths, perm_idx = embed_and_pad( df, np.arange(len(df.index))) loss = model.learn_once((seq_tensor, seq_lengths), y) print(loss.data.cpu().numpy()) return loss.data.cpu().numpy()