Last active
November 18, 2016 19:16
-
-
Save w0nk0/8bc5d11761e4459909e5 to your computer and use it in GitHub Desktop.
Beefed up Chainer LSTM example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Python34\\lib\\site-packages\\skcuda\\cublas.py:273: UserWarning: creating CUBLAS context to get version number\n", | |
" warnings.warn('creating CUBLAS context to get version number')\n" | |
] | |
} | |
], | |
"source": [ | |
"import argparse\n", | |
"import math\n", | |
"import sys\n", | |
"import time\n", | |
"\n", | |
"import numpy as np\n", | |
"import six\n", | |
"\n", | |
"import chainer\n", | |
"from chainer import cuda\n", | |
"import chainer.functions as F\n", | |
"from chainer import optimizers" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"\n", | |
"######### CONFIGURATION ###########\n", | |
"\n", | |
"# training data source\n", | |
"train_file = 'chainer.txt'\n", | |
"train_chars = True # False for word-level training like the original example\n", | |
"tokenize_caps = False # if set to True in train_chars mode, will replace AB with |a|b to get a smaller vocabulary\n", | |
"train_fraction = 0.90 # amount of source file data to use for training \n", | |
"valid_fraction = 0.03 # amount of source file data to use for validation (too much -> slow training)\n", | |
"test_fraction = 0.07 # amount of source file data to use for training \n", | |
"\n", | |
"# training parameters\n", | |
"n_epoch = 100 # number of epochs\n", | |
"n_units = 200 # number of units per layer\n", | |
"batchsize = 128 # minibatch size\n", | |
"bprop_len = 120 # length of truncated BPTT\n", | |
"grad_clip = 5 # gradient norm threshold to clip\n", | |
"use_GPU_no = 0 # GPU index to use, set to -1 for CPU\n", | |
"\n", | |
"# reporting parameters\n", | |
"generate_every = 180 # every X seconds during training, generate some text to assess progress\n", | |
"validate_every = int(n_epoch/8) # default: do a validation every n-th epoch during training (default=8 times total)\n", | |
"perp_every = 30 # display the current perplexity every x seconds\n", | |
"\n", | |
"####### END CONFIGURATION #########\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# CANNOT USE THIS IN NOTEBOOK\n", | |
"\n", | |
"#parser = argparse.ArgumentParser()\n", | |
"#parser.add_argument('--gpu', '-g', default=-1, type=int,\n", | |
"# help='GPU ID (negative value indicates CPU)')\n", | |
"#args = parser.parse_args()\n", | |
"#mod = cuda if args.gpu >= 0 else np\n", | |
"# so let's fake --gpu 0 arg\n", | |
"\n", | |
"class FakeArg:\n", | |
" def __init__(self):\n", | |
" pass\n", | |
"args = FakeArg()\n", | |
"mod = cuda\n", | |
"args.gpu = use_GPU_no" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"#vocab = 88\n", | |
"train_data: 74246 items\n", | |
"valid_data: 1650 items\n", | |
"test_data: 6600 items\n" | |
] | |
} | |
], | |
"source": [ | |
"## text generation helper functions\n", | |
"\n", | |
"def replace_caps(input, identifier=\"|\", identifier_replace=\"}{\"):\n", | |
" input = input.replace(identifier, identifier_replace)\n", | |
" uppers=[chr(n) for n in range(ord(\"A\"),ord(\"Z\"))]\n", | |
" lowers=[identifier+chr(n) for n in range(ord(\"a\"),ord(\"z\"))]\n", | |
" for u, repl in zip(uppers,lowers):\n", | |
" input = input.replace(u,repl)\n", | |
" return input\n", | |
" \n", | |
"\n", | |
"def rebuild_caps(input, identifier=\"|\", identifier_replace=\"}{\"):\n", | |
" uppers=[chr(n) for n in range(ord(\"A\"),ord(\"Z\"))]\n", | |
" lowers=[identifier+chr(n) for n in range(ord(\"a\"),ord(\"z\"))]\n", | |
" for u, repl in zip(uppers,lowers):\n", | |
" input = input.replace(repl,u)\n", | |
" input = input.replace(identifier_replace, identifier)\n", | |
" return input\n", | |
"\n", | |
"\n", | |
"def load_data(filename):\n", | |
" global vocab, n_vocab\n", | |
" words = open(filename).read().replace('\\n', ' <eos> ').strip().split()\n", | |
" dataset = np.ndarray((len(words),), dtype=np.int32)\n", | |
" for i, word in enumerate(words):\n", | |
" if word not in vocab:\n", | |
" vocab[word] = len(vocab)\n", | |
" dataset[i] = vocab[word]\n", | |
" return dataset\n", | |
"\n", | |
"def load_data_onechar(filename, nocaps=True):\n", | |
" global vocab, n_vocab\n", | |
" with open(filename,\"rb\") as f:\n", | |
" raw = f.read().decode('utf-8',errors='replace')\n", | |
" if nocaps: \n", | |
" raw = replace_caps(raw)\n", | |
" chars = [char for char in raw.replace('\\n', '<br>').replace(\"\\r\",\"\").strip() ]\n", | |
" dataset = np.ndarray((len(chars),), dtype=np.int32)\n", | |
" vocab[\"\"] = 0\n", | |
" for i, char in enumerate(chars):\n", | |
" if char not in vocab:\n", | |
" vocab[char] = len(vocab)\n", | |
" dataset[i] = vocab[char]\n", | |
" return dataset\n", | |
"\n", | |
"# Prepare dataset (preliminary download dataset by ./download.py)\n", | |
"vocab = {}\n", | |
"\n", | |
"#all_train_data = load_data('emilydickinson.txt')\n", | |
"if train_chars:\n", | |
" all_train_data = load_data_onechar(train_file, nocaps=tokenize_caps)\n", | |
"else:\n", | |
" all_train_data = load_data(train_file)\n", | |
" \n", | |
"\n", | |
"#valid_data = load_data('ptb.valid.txt')\n", | |
"#test_data = load_data('ptb.test.txt')\n", | |
"\n", | |
"total_len = len(all_train_data)\n", | |
"\n", | |
"#potentially truncate the data for faster prototype training\n", | |
"total_len = total_len #/5\n", | |
"\n", | |
"# chop parts off for validation and test\n", | |
"train = total_len * train_fraction\n", | |
"valid = total_len * valid_fraction\n", | |
"test = total_len * test_fraction\n", | |
"\n", | |
"train_data = all_train_data[:int(train)]\n", | |
"valid_data = all_train_data[int(train):int(train+valid)]\n", | |
"test_data = all_train_data[int(train+valid):int(train+valid+test)]\n", | |
"\n", | |
"print('#vocab =', len(vocab))\n", | |
"print(\"train_data:\",len(train_data),\"items\")\n", | |
"print(\"valid_data:\",len(valid_data),\"items\")\n", | |
"print(\"test_data:\",len(test_data),\"items\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# Neural net architecture\n", | |
"\n", | |
"def forward_one_step(x_data, y_data, state, train=True):\n", | |
" if args.gpu >= 0:\n", | |
" x_data = cuda.to_gpu(x_data)\n", | |
" y_data = cuda.to_gpu(y_data)\n", | |
" \n", | |
" x = chainer.Variable(x_data, volatile=not train)\n", | |
" t = chainer.Variable(y_data, volatile=not train)\n", | |
" \n", | |
" h0 = model.embed(x)\n", | |
" \n", | |
" h1_in = model.l1_x(F.dropout(h0, train=train)) + model.l1_h(state['h1'])\n", | |
" c1, h1 = F.lstm(state['c1'], h1_in)\n", | |
" h2_in = model.l2_x(F.dropout(h1, train=train)) + model.l2_h(state['h2'])\n", | |
" c2, h2 = F.lstm(state['c2'], h2_in)\n", | |
" y = model.l3(F.dropout(h2, train=train))\n", | |
" \n", | |
" state = {'c1': c1, 'h1': h1, 'c2': c2, 'h2': h2}\n", | |
" return state, F.softmax_cross_entropy(y, t)\n", | |
"\n", | |
"\n", | |
"def make_initial_state(batchsize=batchsize, train=True):\n", | |
" return {name: chainer.Variable(mod.zeros((batchsize, n_units), dtype=np.float32), volatile=not train)\n", | |
" for name in ('c1', 'h1', 'c2', 'h2')}\n", | |
"\n", | |
"# Evaluation routine\n", | |
"def evaluate(dataset):\n", | |
" sum_log_perp = mod.zeros(())\n", | |
" state = make_initial_state(batchsize=1, train=False)\n", | |
" for i in six.moves.range(0,dataset.size - 1,1):\n", | |
" x_batch = dataset[i:i + 1]\n", | |
" y_batch = dataset[i + 1:i + 2]\n", | |
" state, loss = forward_one_step(x_batch, y_batch, state, train=False)\n", | |
" sum_log_perp += loss.data.reshape(())\n", | |
"\n", | |
" return math.exp(cuda.to_cpu(sum_log_perp) / (dataset.size - 1))\n", | |
"\n", | |
"\n", | |
"# Prepare RNNLM model\n", | |
"model = chainer.FunctionSet(embed=F.EmbedID(len(vocab), n_units),\n", | |
" l1_x=F.Linear(n_units, 4 * n_units), \n", | |
" l1_h=F.Linear(n_units, 4 * n_units),\n", | |
" l2_x=F.Linear(n_units, 4 * n_units), \n", | |
" l2_h=F.Linear(n_units, 4 * n_units),\n", | |
" l3=F.Linear(n_units, len(vocab)))\n", | |
"\n", | |
"for param in model.parameters:\n", | |
" param[:] = np.random.uniform(-0.1, 0.1, param.shape)\n", | |
"if args.gpu >= 0:\n", | |
" cuda.init(args.gpu)\n", | |
" model.to_gpu()\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# helper functions\n", | |
"def to_word(idx):\n", | |
" global vocab\n", | |
" return list(vocab.keys())[list(vocab.values()).index(idx)]\n", | |
"\n", | |
"def to_index(word):\n", | |
" global vocab\n", | |
" return vocab.get(word.lower(),vocab.get('<unk>',0))\n", | |
"\n", | |
"\n", | |
"def produce_one_step(x_data,state, train=False):\n", | |
" if args.gpu >= 0:\n", | |
" x_data = cuda.to_gpu(x_data)\n", | |
" x = chainer.Variable(x_data, volatile=not train)\n", | |
" h0 = model.embed(x)\n", | |
" h1_in = model.l1_x(F.dropout(h0, train=train)) + model.l1_h(state['h1'])\n", | |
" c1, h1 = F.lstm(state['c1'], h1_in)\n", | |
" h2_in = model.l2_x(F.dropout(h1, train=train)) + model.l2_h(state['h2'])\n", | |
" c2, h2 = F.lstm(state['c2'], h2_in)\n", | |
" y = model.l3(F.dropout(h2, train=train))\n", | |
" state = {'c1': c1, 'h1': h1, 'c2': c2, 'h2': h2}\n", | |
" return state, y" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"#### TEXT PRODUCTION HELPERS\n", | |
"# helper functions\n", | |
"def to_word(idx):\n", | |
" global vocab\n", | |
" return list(vocab.keys())[list(vocab.values()).index(idx)]\n", | |
"\n", | |
"def to_index(word):\n", | |
" global vocab\n", | |
" return vocab.get(word.lower(),vocab.get('<unk>',0))\n", | |
"\n", | |
"\n", | |
"def produce_one_step(x_data,state, train=False):\n", | |
" if args.gpu >= 0:\n", | |
" x_data = cuda.to_gpu(x_data)\n", | |
" x = chainer.Variable(x_data, volatile=not train)\n", | |
" h0 = model.embed(x)\n", | |
" h1_in = model.l1_x(F.dropout(h0, train=train)) + model.l1_h(state['h1'])\n", | |
" c1, h1 = F.lstm(state['c1'], h1_in)\n", | |
" h2_in = model.l2_x(F.dropout(h1, train=train)) + model.l2_h(state['h2'])\n", | |
" c2, h2 = F.lstm(state['c2'], h2_in)\n", | |
" y = model.l3(F.dropout(h2, train=train))\n", | |
" state = {'c1': c1, 'h1': h1, 'c2': c2, 'h2': h2}\n", | |
" return state, y\n", | |
"\n", | |
"import sys\n", | |
"\n", | |
"def generate(primer_text,amount,dictionary,randomness=0.5,start_state=None,stop_count=3, separator=\" \"):\n", | |
" state = start_state or make_initial_state(1,False)\n", | |
" \n", | |
" primer_text.replace(\"\\n\",\"<eos>\")\n", | |
" print(primer_text + \" => \")\n", | |
" if separator: # don't split if it's a character based model!\n", | |
" primer_text = primer_text.split()\n", | |
" primer_x = [to_index(word) for word in primer_text]\n", | |
" \n", | |
" # priming until before the last item, that goes into generation loop since we want the result\n", | |
" for item in primer_x[:-1]:\n", | |
" state, y = produce_one_step(np.array([item],dtype=\"int32\"),state)\n", | |
" yarr = [float(x) for x in cuda.to_cpu(y.data.ravel())]\n", | |
" #print(to_word(item),\"->\",to_word(np.argmax(yarr)),end=\" # \")\n", | |
" sys.stdout.flush()\n", | |
" \n", | |
" #print(\"\\nLooping:\\n\")\n", | |
" \n", | |
" current = primer_x[-1]\n", | |
" end_count=0\n", | |
" for i in range(amount):\n", | |
" # feed x to model\n", | |
" state, y = produce_one_step(np.array([current],dtype=\"int32\"),state)\n", | |
" # append y to x - wait, we DON'T NEED TO APPEND; THIS IS A REAL RNN\n", | |
" # print y\n", | |
" yarr = cuda.to_cpu(y.data.ravel())\n", | |
" result_word = \"<unk>\"\n", | |
" while result_word == \"<unk>\":\n", | |
" yarr *= (1+np.random.uniform(high=randomness,size=len(yarr)))\n", | |
" yidx = np.argmax([float(i) for i in yarr])\n", | |
" result_word = to_word(yidx)\n", | |
" print(result_word.replace(\"\\r\",\"<r>\"),end=separator)\n", | |
" sys.stdout.flush()\n", | |
" current = to_index(result_word)\n", | |
"\n", | |
" if i >= 5: # look for production stoppers after 5 words\n", | |
" if \".\" in result_word or \"!\" in result_word or \"?\" in result_word:\n", | |
" end_count += 1\n", | |
" if \"<eos>\" in result_word:\n", | |
" end_count += 3\n", | |
" if end_count >= stop_count:\n", | |
" break\n", | |
" \n", | |
" #y_cpu = cuda.to_cpu(y)\n", | |
" #print(\"y.data-\",y.data[0][-1],end=\"#\")\n", | |
" #current=int(y_cpu.data[0][-1])\n", | |
" print(\"\\n\",\"-\" * 16)\n", | |
" \n", | |
" return state\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# plotting \n", | |
"%matplotlib inline\n", | |
"import matplotlib\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"def plot_progress(perp_dic, title=\"perplexity\", start_at=0, log_axis=True):\n", | |
" trn = list(perp_dic.items())\n", | |
" trn.sort()\n", | |
" plt.plot([x[0] for x in trn[start_at:]],[x[1] for x in trn[start_at:]] )\n", | |
" plt.title(title)\n", | |
" if log_axis: plt.yscale('log')\n", | |
" plt.show()\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# Setup optimizer\n", | |
"#optimizer = optimizers.SGD(lr=1.0)\n", | |
"#optimizer = optimizers.SGD(lr=1.)\n", | |
"optimizer = optimizers.Adam()\n", | |
"optimizer.setup(model.collect_parameters())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# Learning loop prep\n", | |
"\n", | |
"# training data range init\n", | |
"whole_len = train_data.shape[0]\n", | |
"jump = whole_len // batchsize\n", | |
"epoch = 0\n", | |
"start_iter = 0 # use 'start_iter = i' if you want to continue a previous training!\n", | |
"# time stamps for throughput calc\n", | |
"start_at = time.time()\n", | |
"cur_at = start_at \n", | |
"# loss and state initialization\n", | |
"cur_log_perp = mod.zeros(())\n", | |
"accum_loss = chainer.Variable(mod.zeros((), dtype=np.float32)) \n", | |
"state = make_initial_state()\n", | |
"# logging initialization\n", | |
"training_perps = {}\n", | |
"valid_perps = {}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# uncomment the next line to continue previously interrupted training!\n", | |
"#start_iter = i" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"batch size is 580\n", | |
"going to train 100 epochs = 58000 iterations\n", | |
"iter 193 training perplexity: 89.73 ( 6.62 iters/sec) ETA: Mon Aug 3 19:32:28 2015\n", | |
"iter 2427 training perplexity: 39.66 ( 27.56 iters/sec) ETA: Mon Aug 3 17:41:30 2015\n", | |
"iter 3536 training perplexity: 25.92 ( 30.21 iters/sec) ETA: Mon Aug 3 17:38:26 2015\n", | |
"iter 4679 training perplexity: 22.56 ( 32.04 iters/sec) ETA: Mon Aug 3 17:36:37 2015\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\ncP17BJkAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x18299ef0>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
" \n", | |
" ----------------------------------------\n", | |
"Validating.. epoch 12 validation perplexity: 17.88\n", | |
"iter 7946 training perplexity: 18.24 ( 31.67 iters/sec) ETA: Mon Aug 3 17:36:57 2015\n", | |
"iter 9077 training perplexity: 14.79 ( 32.43 iters/sec) ETA: Mon Aug 3 17:36:15 2015\n", | |
"iter 11363 training perplexity: 12.99 ( 33.53 iters/sec) ETA: Mon Aug 3 17:35:16 2015\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x182e0198>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
"ettarray \n", | |
" ----------------------------------------\n", | |
"iter 12360 training perplexity: 11.63 ( 33.59 iters/sec) ETA: Mon Aug 3 17:35:13 2015\n", | |
"iter 13494 training perplexity: 11.05 ( 34.00 iters/sec) ETA: Mon Aug 3 17:34:52 2015\n", | |
"Validating.. epoch 25 validation perplexity: 11.08\n", | |
"iter 15720 training perplexity: 10.17 ( 33.33 iters/sec) ETA: Mon Aug 3 17:35:27 2015\n", | |
"iter 16864 training perplexity: 9.40 ( 33.68 iters/sec) ETA: Mon Aug 3 17:35:08 2015\n", | |
"iter 19098 training perplexity: 8.85 ( 34.12 iters/sec) ETA: Mon Aug 3 17:34:46 2015\n", | |
"iter 20234 training perplexity: 8.34 ( 34.37 iters/sec) ETA: Mon Aug 3 17:34:34 2015\n", | |
"iter 21360 training perplexity: 8.02 ( 34.52 iters/sec) ETA: Mon Aug 3 17:34:26 2015\n", | |
"Validating.. epoch 37 validation perplexity: 7.85\n", | |
"iter 22512 training perplexity: 7.65 ( 33.96 iters/sec) ETA: Mon Aug 3 17:34:54 2015\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\neBk4DPgbYFVEzJR0ITA6ImaUjd/jmj3A2rXp2bSrV8N22/X4Y2ZmDaUeavYnAM9FxEvAGcCsbPgs\n4Ky+BjNyJEybBg8/3NcpmZlZqd4m+z8Drsu6x0dEW9bdBoyvREAu5ZiZVd6gno4oaQhwOnBh+XsR\nEZI6rNe0trZu6W5paaGlpaXL+UyfDldeCTNmdDmamVnDKBQKFAqFqs6jxzV7SWcCfxURJ2X9C4CW\niFguaQIwJyL2KvtMr2r2ACtWpFLO6tUwcGCvPmpm1hDyrtl/lPYSDsAtwHlZ93nAzZUIaOedYcIE\nePzxSkzNzMygh8le0jDSwdmflwy+BHi/pIXA8Vl/Rbhub2ZWWT1K9hHxRkSMi4h1JcPWRMQJETEt\nIk6MiFcrFZRvimZmVll1c2+cUi++CIcemu6To4pWrczM6l/eNfuamTwZhg6FZ57JOxIzs8ZQl8ke\nXMoxM6ukuk32PkhrZlY5TvZmZk2gbpP9tGmwYUN6CLmZmfVN3SZ7yXV7M7NKqdtkDy7lmJlVSl0n\ne7fszcwqoy4vqiratAnGjoWFC9M9c8zMmkHTXFRVNHAgHH20W/dmZn1V18keXMoxM6uEuk/2Pkhr\nZtZ3dV2zB3jrLRgzBl5+OT2j1sys0TVdzR5gyBA47DC49968IzEz67/qPtlDqtu7lGNmtu16+qSq\nUZJukvS0pKckHS5pjKTZkhZKul3SqGoF6bq9mVnf9KhmL2kWcEdEXC1pEDAM+CqwKiJmSroQGB0R\nM8o+1+eaPcAbb8D48bByJeywQ58nZ2ZW13Kp2UsaCRwbEVcDRMTGiFgLnAHMykabBZxVycBKDRsG\n++0HDzxQrTmYmTW2npRxdgdWSvqxpEck/Sh7APn4iGjLxmkDxlctSlzKMTPri0E9HOdg4PMR8aCk\ny4CtyjUREZI6rNe0trZu6W5paaGlpWWbAp0+HS6/fJs+amZW1wqFAoVCoarz6LZmL2kX4L6I2D3r\nPwa4CNgDeF9ELJc0AZgTEXuVfbYiNXuAV15Jz6ZdswYGD67IJM3M6lIuNfuIWA68JGlaNugE4Eng\nVuC8bNh5wM2VDKzc6NGwxx7wyCPVnIuZWWPqSRkH4G+A/5Q0BFgEfBwYCNwo6ZPAYuDsqkRYYvr0\ndJ+cww+v9pzMzBpL3d8uodSNN8JPfwq33FKxSZqZ1Z1qlHH6VbJftgz23RdWrYIB/eLaXzOz3mvK\n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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x184837f0>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
"nentet or \n", | |
" ----------------------------------------\n", | |
"iter 25800 training perplexity: 7.02 ( 34.32 iters/sec) ETA: Mon Aug 3 17:34:36 2015\n", | |
"iter 26927 training perplexity: 6.48 ( 34.49 iters/sec) ETA: Mon Aug 3 17:34:28 2015\n", | |
"iter 28070 training perplexity: 6.25 ( 34.66 iters/sec) ETA: Mon Aug 3 17:34:20 2015\n", | |
"Validating.. epoch 50 validation perplexity: 5.84\n", | |
"iter 29056 training perplexity: 6.06 ( 34.03 iters/sec) ETA: Mon Aug 3 17:34:51 2015\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\nAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x17034358>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
"nter sonction tor is the tore the setine the the array. on array.<br><br> \n", | |
" ----------------------------------------\n", | |
"iter 31320 training perplexity: 5.76 ( 34.28 iters/sec) ETA: Mon Aug 3 17:34:38 2015\n", | |
"iter 32411 training perplexity: 5.52 ( 34.38 iters/sec) ETA: Mon Aug 3 17:34:33 2015\n", | |
"iter 33505 training perplexity: 5.38 ( 34.48 iters/sec) ETA: Mon Aug 3 17:34:28 2015\n", | |
"iter 34597 training perplexity: 5.25 ( 34.57 iters/sec) ETA: Mon Aug 3 17:34:24 2015\n", | |
"iter 35755 training perplexity: 5.12 ( 34.72 iters/sec) ETA: Mon Aug 3 17:34:17 2015\n", | |
"Validating.. epoch 62 validation perplexity: 4.81\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x170210f0>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
"nters):<br> \n", | |
" ----------------------------------------\n", | |
"iter 37907 training perplexity: 4.93 ( 34.33 iters/sec) ETA: Mon Aug 3 17:34:36 2015\n", | |
"iter 40150 training perplexity: 4.68 ( 34.52 iters/sec) ETA: Mon Aug 3 17:34:27 2015\n", | |
"iter 42360 training perplexity: 4.48 ( 34.65 iters/sec) ETA: Mon Aug 3 17:34:20 2015\n", | |
"iter 43465 training perplexity: 4.33 ( 34.73 iters/sec) ETA: Mon Aug 3 17:34:16 2015\n", | |
"Validating.. epoch 75 validation perplexity: 4.18\n", | |
"iter 44592 training perplexity: 4.24 ( 34.42 iters/sec) ETA: Mon Aug 3 17:34:31 2015\n", | |
"iter 46815 training perplexity: 4.12 ( 34.56 iters/sec) ETA: Mon Aug 3 17:34:24 2015\n", | |
"iter 47880 training perplexity: 4.02 ( 34.61 iters/sec) ETA: Mon Aug 3 17:34:22 2015\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1829a320>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"--- Generating text: \n", | |
"i...\n", | |
"ntext is nont of inition in setine the corater<br> \n", | |
" ----------------------------------------\n", | |
"Validating.. epoch 87 validation perplexity: 3.80\n", | |
"iter 51120 training perplexity: 3.86 ( 34.32 iters/sec) ETA: Mon Aug 3 17:34:36 2015\n", | |
"iter 52200 training perplexity: 3.73 ( 34.37 iters/sec) ETA: Mon Aug 3 17:34:34 2015\n", | |
"iter 53352 training perplexity: 3.68 ( 34.47 iters/sec) ETA: Mon Aug 3 17:34:29 2015\n", | |
"iter 55560 training perplexity: 3.58 ( 34.57 iters/sec) ETA: Mon Aug 3 17:34:24 2015\n", | |
"iter 56676 training perplexity: 3.51 ( 34.64 iters/sec) ETA: Mon Aug 3 17:34:21 2015\n", | |
"iter 57810 training perplexity: 3.47 ( 34.72 iters/sec) ETA: Mon Aug 3 17:34:17 2015\n", | |
"Validating.. epoch 100 validation perplexity: 3.52\n", | |
"\n", | |
"Training complete! Evaluating test data..done!\n", | |
"\n", | |
"Test perplexity: 3.4527037704247037\n" | |
] | |
} | |
], | |
"source": [ | |
"# Learning loop \n", | |
"print('batch size is {}'.format(jump))\n", | |
"total_iterations = jump * n_epoch\n", | |
"print('going to train {} epochs = {} iterations'.format(n_epoch,total_iterations))\n", | |
"last_iter = 0 # to count throughput, for restarting iteration loop after interrupting training\n", | |
"sys.stdout.flush()\n", | |
"for i in six.moves.range(start_iter,jump * n_epoch):\n", | |
" x_batch = np.array([train_data[(jump * j + i) % whole_len]\n", | |
" for j in six.moves.range(batchsize)])\n", | |
" y_batch = np.array([train_data[(jump * j + i + 1) % whole_len]\n", | |
" for j in six.moves.range(batchsize)])\n", | |
" state, loss_i = forward_one_step(x_batch, y_batch, state)\n", | |
" accum_loss += loss_i\n", | |
" cur_log_perp += loss_i.data.reshape(())\n", | |
" \n", | |
" \n", | |
" if (i + 1) % bprop_len == 0: # Run truncated BPTT\n", | |
" optimizer.zero_grads()\n", | |
" accum_loss.backward()\n", | |
" accum_loss.unchain_backward() # truncate\n", | |
" accum_loss = chainer.Variable(mod.zeros((), dtype=np.float32))\n", | |
"\n", | |
" optimizer.clip_grads(grad_clip)\n", | |
" optimizer.update()\n", | |
"\n", | |
" if int(time.time() - cur_at + 1) % perp_every == 0:\n", | |
" now = time.time()\n", | |
" throuput = i / (now - start_at)\n", | |
" perp = math.exp(cuda.to_cpu(cur_log_perp) / (i-last_iter))\n", | |
" training_perps[i] = perp\n", | |
" print('iter {:6d} training perplexity: {:7.2f} ({:7.2f} iters/sec)'.format(\n", | |
" i + 1, perp, throuput),end=\" \")\n", | |
" #print('ETA final: {:.1f} minutes'.format((total_iterations-i)/throuput/60.0))\n", | |
" if i> jump/4: \n", | |
" print(\"ETA:\",time.ctime(time.time()+(total_iterations-i)/throuput))\n", | |
" else: \n", | |
" print(\"\")\n", | |
" cur_at = now\n", | |
" last_iter = i\n", | |
" cur_log_perp.fill(0)\n", | |
"\n", | |
" if int(time.time() - start_at + 1) % generate_every == 0: \n", | |
" plot_progress(training_perps,\n", | |
" title=\"Training perplexity (vocab size: {})\".format(len(vocab)),\n", | |
" start_at=2) \n", | |
" print(\"--- Generating text: \")\n", | |
" generate(to_word(1), 150, vocab, start_state=None,separator=\"\")\n", | |
" \n", | |
" if (i+1) % jump == 0:\n", | |
" epoch += 1\n", | |
" \n", | |
" if (i + 1) % int(validate_every) == 0:\n", | |
" print('Validating..',end=\" \")\n", | |
" sys.stdout.flush()\n", | |
" now = time.time()\n", | |
" perp = evaluate(valid_data)\n", | |
" valid_perps[i] = perp\n", | |
" #print('ETA for end of training: in {:.1f} minutes'.format((total_iterations-i)/throuput/60.0))\n", | |
" print('epoch {} validation perplexity: {:.2f}'.format(epoch, perp))\n", | |
" cur_at += time.time() - now # skip time of evaluation\n", | |
"\n", | |
" if \"SGD\" in str(type(optimizer)) and epoch >= 8:\n", | |
" optimizer.lr /= 1.1\n", | |
" print('learning rate =', optimizer.lr)\n", | |
"\n", | |
" sys.stdout.flush()\n", | |
" \n", | |
"print('\\nTraining complete! Evaluating test data..',end=\"\")\n", | |
"sys.stdout.flush()\n", | |
"test_perp = evaluate(test_data)\n", | |
"print('done!\\n\\nTest perplexity:', test_perp)\n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Now, wait for the training to complete\n", | |
"\n", | |
"* After a couple iterations, you will get an estimated ETA for completion\n", | |
"* You can interrupt it with Kernel -> interrupt and continue after some tests! \n", | |
"* (uncomment and run the cell before the training loop to reinstate the iteration counter if you do)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Once it's done, generate a complete report about the run:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"n_epoch : 100\n", | |
"n_units : 200\n", | |
"batchsize : 128\n", | |
"bprop_len : 120\n", | |
"grad_clip : 5\n", | |
"train_file : chainer.txt\n", | |
"optimizer : <chainer.optimizers.adam.Adam object at 0x000000000FA147F0>\n", | |
"train_chars : True\n", | |
"tokenize_caps : False\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\nAXnvAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x16f57048>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x197c4358>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"items = \"n_epoch n_units batchsize bprop_len grad_clip train_file optimizer train_chars tokenize_caps\"\n", | |
"for x in items.split(\" \"):\n", | |
" print(x,\":\",locals()[x])\n", | |
"\n", | |
"plot_progress(training_perps,title=\"Training perplexity\",start_at=3, log_axis=False)\n", | |
"plot_progress(valid_perps,title=\"Validation perplexity\",start_at=0, log_axis=False)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": false | |
}, | |
"source": [ | |
"#### Generate some text like this:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"def => \n", | |
"out_device):<br> \n", | |
" ----------------\n", | |
"def => \n", | |
"= gx.gpu(array)<br> \n", | |
" ----------------\n", | |
"def => \n", | |
"= is is self.thes = stream()<br> \n", | |
" ----------------\n", | |
"def => \n", | |
"= grad_outputs)<br><br><br> def __gpu(self, in_stric):<br> \n", | |
" ----------------\n", | |
"def => \n", | |
"in___is__init____self.inport):<br> \n", | |
" ----------------\n" | |
] | |
} | |
], | |
"source": [ | |
"prompt = \"def \"\n", | |
"prod_state = None\n", | |
"for randomness in [0.2,0.35,0.5,0.8,1.2]:\n", | |
" prod_state = generate(prompt,600,vocab,randomness=randomness,start_state=prod_state,separator=\"\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Development stuff below .." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"########## DEVELOPMENT SECTION BELOW, IGNORE ;) ##########" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# alternative generation text\n", | |
"#prompt = to_word(0)\n", | |
"#prod_state = None\n", | |
"#for randomness in [0.1,0.3,0.5,1.0,1.4]:\n", | |
"# prod_state = generate_choice(prompt,600,vocab,randomness=randomness,start_state=prod_state,separator=\"\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# how to save / load trained networks?\n", | |
"###from pickle import dumps, loads\n", | |
"#import json\n", | |
"#members = dict(state.items())\n", | |
"#json.dumps(members)??\n", | |
"#str(to_word(1))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"#generate(str(to_word(1)), 150, vocab, start_state=None,separator=\"\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"#from collections import Counter\n", | |
"#Counter(open(\"chainer.txt\").read())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"#state,result = produce_one_step(np.array([3]),make_initial_state(1,False))\n", | |
"#y=cuda.to_cpu(result.data.ravel())\n", | |
"#y = np.array(y,dtype='float64')\n", | |
"#y -= y.min()\n", | |
"#y /= sum(y) \n" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.4.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The narrow main column in the notebook layout on github breaks the formatting somewhat, it should look just fine (without all the line wrapping going on) when running it on a local machine; at least it does for me.