Skip to content

Commit 935af42

Browse files
committedSep 4, 2019
lstm fixed
Former-commit-id: 636502b
1 parent cce5056 commit 935af42

File tree

1 file changed

+79
-211
lines changed

1 file changed

+79
-211
lines changed
 

‎examples/1. Vanilla RL/5. LSTM State Encoder.ipynb

+79-211
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"## LSTM state encoder [TEST]"
7+
"## LSTM state encoder"
88
]
99
},
1010
{
1111
"cell_type": "code",
12-
"execution_count": 26,
12+
"execution_count": 1,
1313
"metadata": {},
1414
"outputs": [],
1515
"source": [
@@ -23,7 +23,7 @@
2323
},
2424
{
2525
"cell_type": "code",
26-
"execution_count": 27,
26+
"execution_count": 2,
2727
"metadata": {},
2828
"outputs": [],
2929
"source": [
@@ -84,7 +84,7 @@
8484
},
8585
{
8686
"cell_type": "code",
87-
"execution_count": 28,
87+
"execution_count": 4,
8888
"metadata": {},
8989
"outputs": [],
9090
"source": [
@@ -99,7 +99,7 @@
9999
},
100100
{
101101
"cell_type": "code",
102-
"execution_count": 29,
102+
"execution_count": 5,
103103
"metadata": {},
104104
"outputs": [],
105105
"source": [
@@ -123,7 +123,7 @@
123123
},
124124
{
125125
"cell_type": "code",
126-
"execution_count": 30,
126+
"execution_count": 6,
127127
"metadata": {},
128128
"outputs": [],
129129
"source": [
@@ -173,13 +173,13 @@
173173
},
174174
{
175175
"cell_type": "code",
176-
"execution_count": 31,
176+
"execution_count": 7,
177177
"metadata": {},
178178
"outputs": [
179179
{
180180
"data": {
181181
"application/vnd.jupyter.widget-view+json": {
182-
"model_id": "8dddbfd676c741e68c5262a8972e5013",
182+
"model_id": "c2bde4576a804b8aa3efc5609b2235fb",
183183
"version_major": 2,
184184
"version_minor": 0
185185
},
@@ -216,15 +216,14 @@
216216
},
217217
{
218218
"cell_type": "code",
219-
"execution_count": 37,
219+
"execution_count": 8,
220220
"metadata": {},
221221
"outputs": [],
222222
"source": [
223223
"def ddpg_update(batch, params, nets, optimizer, device, debugger=False, learn=True, step=-1):\n",
224224
" batch = [i.to(device) for i in batch]\n",
225-
" state, action, reward, next_state, done = batch\n",
226-
" reward = reward.unsqueeze(1)\n",
227-
" # done = done.unsqueeze(1)\n",
225+
" state, action, reward, next_state = batch\n",
226+
" # reward = reward.unsqueeze(1)\n",
228227
"\n",
229228
" # --------------------------------------------------------#\n",
230229
" # Value Learning\n",
@@ -280,88 +279,59 @@
280279
},
281280
{
282281
"cell_type": "code",
283-
"execution_count": 38,
282+
"execution_count": 9,
283+
"metadata": {},
284+
"outputs": [],
285+
"source": [
286+
"class ReplayBuffer():\n",
287+
" def __init__(self, buffer_size):\n",
288+
" self.buffer = None\n",
289+
" self.idx = 0\n",
290+
" self.size = buffer_size\n",
291+
" self.flush()\n",
292+
" \n",
293+
" def flush(self):\n",
294+
" # state, action, reward, next_state\n",
295+
" self.buffer = [torch.zeros(self.size, 256),\n",
296+
" torch.zeros(self.size, 128),\n",
297+
" torch.zeros(self.size, 1),\n",
298+
" torch.zeros(self.size, 256)]\n",
299+
" self.idx = 0\n",
300+
" \n",
301+
" def append(self, batch):\n",
302+
" \n",
303+
" state, action, reward, next_state = batch\n",
304+
" lower = self.idx\n",
305+
" upper = state.size(0) + lower\n",
306+
" self.buffer[0][lower:upper] = state\n",
307+
" self.buffer[1][lower:upper] = action\n",
308+
" self.buffer[2][lower:upper] = reward\n",
309+
" self.buffer[3][lower:upper] = next_state\n",
310+
" self.idx += upper\n",
311+
" \n",
312+
" def get(self):\n",
313+
" return self.buffer\n",
314+
" \n",
315+
" def len(self):\n",
316+
" return self.idx"
317+
]
318+
},
319+
{
320+
"cell_type": "code",
321+
"execution_count": 11,
284322
"metadata": {
285323
"scrolled": false
286324
},
287325
"outputs": [
288-
{
289-
"name": "stdout",
290-
"output_type": "stream",
291-
"text": [
292-
"1000\n"
293-
]
294-
},
295-
{
296-
"data": {
297-
"image/png": "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\n",
298-
"text/plain": [
299-
"<Figure size 1152x432 with 2 Axes>"
300-
]
301-
},
302-
"metadata": {
303-
"needs_background": "light"
304-
},
305-
"output_type": "display_data"
306-
},
307-
{
308-
"name": "stdout",
309-
"output_type": "stream",
310-
"text": [
311-
"\n"
312-
]
313-
},
314-
{
315-
"data": {
316-
"application/vnd.jupyter.widget-view+json": {
317-
"model_id": "8609121ed2dc44eb99bc54732f41cde9",
318-
"version_major": 2,
319-
"version_minor": 0
320-
},
321-
"text/plain": [
322-
"HBox(children=(IntProgress(value=0, max=2036), HTML(value='')))"
323-
]
324-
},
325-
"metadata": {},
326-
"output_type": "display_data"
327-
},
328-
{
329-
"name": "stdout",
330-
"output_type": "stream",
331-
"text": [
332-
"\n"
333-
]
334-
},
335-
{
336-
"data": {
337-
"application/vnd.jupyter.widget-view+json": {
338-
"model_id": "154eb3b49e9640cda42b47428b31498f",
339-
"version_major": 2,
340-
"version_minor": 0
341-
},
342-
"text/plain": [
343-
"HBox(children=(IntProgress(value=0, max=1977), HTML(value='')))"
344-
]
345-
},
346-
"metadata": {},
347-
"output_type": "display_data"
348-
},
349-
{
350-
"name": "stdout",
351-
"output_type": "stream",
352-
"text": [
353-
"\n"
354-
]
355-
},
356326
{
357327
"data": {
358328
"application/vnd.jupyter.widget-view+json": {
359-
"model_id": "6a2cd11c60c7403b86562503cef16981",
329+
"model_id": "a67b0c82425c418aa3e0998f55bdf8d1",
360330
"version_major": 2,
361331
"version_minor": 0
362332
},
363333
"text/plain": [
364-
"HBox(children=(IntProgress(value=0, max=1922), HTML(value='')))"
334+
"HBox(children=(IntProgress(value=0, max=5340), HTML(value='')))"
365335
]
366336
},
367337
"metadata": {},
@@ -373,173 +343,71 @@
373343
"text": [
374344
"\n"
375345
]
376-
},
377-
{
378-
"data": {
379-
"application/vnd.jupyter.widget-view+json": {
380-
"model_id": "1cc030e1f1e04fedb0e9db92b1116f7a",
381-
"version_major": 2,
382-
"version_minor": 0
383-
},
384-
"text/plain": [
385-
"HBox(children=(IntProgress(value=0, max=1858), HTML(value='')))"
386-
]
387-
},
388-
"metadata": {},
389-
"output_type": "display_data"
390-
},
391-
{
392-
"name": "stdout",
393-
"output_type": "stream",
394-
"text": [
395-
"\n"
396-
]
397-
},
398-
{
399-
"data": {
400-
"application/vnd.jupyter.widget-view+json": {
401-
"model_id": "8a836ab60e7149c28c137ef19affe353",
402-
"version_major": 2,
403-
"version_minor": 0
404-
},
405-
"text/plain": [
406-
"HBox(children=(IntProgress(value=0, max=1790), HTML(value='')))"
407-
]
408-
},
409-
"metadata": {},
410-
"output_type": "display_data"
411-
},
412-
{
413-
"name": "stdout",
414-
"output_type": "stream",
415-
"text": [
416-
"\n"
417-
]
418-
},
419-
{
420-
"data": {
421-
"application/vnd.jupyter.widget-view+json": {
422-
"model_id": "2eecd903abbb44a392a091b589bc5342",
423-
"version_major": 2,
424-
"version_minor": 0
425-
},
426-
"text/plain": [
427-
"HBox(children=(IntProgress(value=0, max=1743), HTML(value='')))"
428-
]
429-
},
430-
"metadata": {},
431-
"output_type": "display_data"
432-
},
433-
{
434-
"name": "stdout",
435-
"output_type": "stream",
436-
"text": [
437-
"\n"
438-
]
439-
},
440-
{
441-
"data": {
442-
"application/vnd.jupyter.widget-view+json": {
443-
"model_id": "f6c9109064ef422886dbf0b04b7f0d61",
444-
"version_major": 2,
445-
"version_minor": 0
446-
},
447-
"text/plain": [
448-
"HBox(children=(IntProgress(value=0, max=1712), HTML(value='')))"
449-
]
450-
},
451-
"metadata": {},
452-
"output_type": "display_data"
453-
},
454-
{
455-
"name": "stdout",
456-
"output_type": "stream",
457-
"text": [
458-
"\n"
459-
]
460-
},
461-
{
462-
"data": {
463-
"application/vnd.jupyter.widget-view+json": {
464-
"model_id": "f06b638e6e3d400d9b232d12c95e4c22",
465-
"version_major": 2,
466-
"version_minor": 0
467-
},
468-
"text/plain": [
469-
"HBox(children=(IntProgress(value=0, max=1675), HTML(value='')))"
470-
]
471-
},
472-
"metadata": {},
473-
"output_type": "display_data"
474-
},
475-
{
476-
"ename": "KeyboardInterrupt",
477-
"evalue": "",
478-
"output_type": "error",
479-
"traceback": [
480-
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
481-
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
482-
"\u001b[0;32m<ipython-input-38-f3509c411a24>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0mbatch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maction\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreward\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnext_state\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtensor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m loss = ddpg_update(batch, params, nets, optimizer,\n\u001b[0;32m---> 16\u001b[0;31m cuda, debugger, step=step)\n\u001b[0m\u001b[1;32m 17\u001b[0m \u001b[0mdebugger\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog_losses\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mstep\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
483-
"\u001b[0;32m<ipython-input-37-575344a6946c>\u001b[0m in \u001b[0;36mddpg_update\u001b[0;34m(batch, params, nets, optimizer, device, debugger, learn, step)\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlearn\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'value_optimizer'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzero_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mvalue_loss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mretain_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'value_optimizer'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
484-
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/torch/tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph)\u001b[0m\n\u001b[1;32m 116\u001b[0m \u001b[0mproducts\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0mDefaults\u001b[0m \u001b[0mto\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 117\u001b[0m \"\"\"\n\u001b[0;32m--> 118\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 119\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mregister_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
485-
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables)\u001b[0m\n\u001b[1;32m 91\u001b[0m Variable._execution_engine.run_backward(\n\u001b[1;32m 92\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrad_tensors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 93\u001b[0;31m allow_unreachable=True) # allow_unreachable flag\n\u001b[0m\u001b[1;32m 94\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
486-
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
487-
]
488346
}
489347
],
490348
"source": [
349+
"max_buf_size = 100000\n",
350+
"buffer = ReplayBuffer(max_buf_size)\n",
351+
"\n",
491352
"step = 0\n",
492353
"for batch in tqdm(train_dataloader):\n",
493354
" batch = [i.to(cuda) for i in batch]\n",
494355
" items, ratings, sizes = batch\n",
495356
" hidden = None\n",
496357
" state = None\n",
497-
" for t in tqdm(range(int(sizes.min().item()) - 1), ):\n",
358+
" for t in range(int(sizes.min().item()) - 1):\n",
498359
" action = items[:, t]\n",
499360
" reward = ratings[:, t].unsqueeze(-1)\n",
500361
" s = torch.cat([action, reward], 1).unsqueeze(0)\n",
501362
" next_state, hidden = state_encoder(s, hidden) if hidden else state_encoder(s)\n",
502363
" next_state = next_state.squeeze()\n",
364+
" \n",
503365
" if np.random.random() > 0.95 and state is not None:\n",
504-
" batch = [state, action, reward, next_state, torch.tensor(0)]\n",
366+
" batch = [state, action, reward, next_state]\n",
367+
" buffer.append(batch)\n",
368+
" \n",
369+
" if buffer.len() >= max_buf_size:\n",
505370
" loss = ddpg_update(batch, params, nets, optimizer,\n",
506371
" cuda, debugger, step=step)\n",
507372
" debugger.log_losses(loss)\n",
508373
" step += 1\n",
374+
" debugger.log_step(step)\n",
375+
" buffer.flush()\n",
509376
" \n",
510-
" if step % 100 == 0 and step > 0:\n",
377+
" #if step % 100 == 0 and step > 0:\n",
511378
" # debugger.test()\n",
512-
" clear_output(True)\n",
513-
" print(step)\n",
514-
" plotter.plot_loss()\n",
379+
" #clear_output(True)\n",
380+
" #print(step)\n",
381+
" #plotter.plot_loss()\n",
515382
" \n",
516383
" state = next_state\n"
517384
]
518385
},
519386
{
520387
"cell_type": "code",
521-
"execution_count": 17,
388+
"execution_count": 31,
522389
"metadata": {},
523390
"outputs": [
524391
{
525392
"data": {
526393
"text/plain": [
527-
"RAdam (\n",
528-
"Parameter Group 0\n",
529-
" betas: (0.9, 0.999)\n",
530-
" eps: 1e-08\n",
531-
" lr: 1e-05\n",
532-
" weight_decay: 0.01\n",
533-
")"
394+
"tensor([[ 0.0014, 0.0003, 0.0042, ..., 0.0018, -0.0047, -0.0153],\n",
395+
" [-0.0002, -0.0059, -0.0043, ..., 0.0009, -0.0029, -0.0116],\n",
396+
" [-0.0011, 0.0041, 0.0024, ..., -0.0014, -0.0010, 0.0091],\n",
397+
" ...,\n",
398+
" [-0.0025, -0.0010, 0.0020, ..., -0.0037, 0.0020, 0.0047],\n",
399+
" [ 0.0011, -0.0007, -0.0060, ..., 0.0007, -0.0012, -0.0131],\n",
400+
" [ 0.0012, -0.0020, 0.0003, ..., 0.0020, -0.0009, 0.0033]],\n",
401+
" device='cuda:0')"
534402
]
535403
},
536-
"execution_count": 17,
404+
"execution_count": 31,
537405
"metadata": {},
538406
"output_type": "execute_result"
539407
}
540408
],
541409
"source": [
542-
"optimizer['policy_optimizer']"
410+
"list(state_encoder.parameters())[0].grad"
543411
]
544412
},
545413
{

0 commit comments

Comments
 (0)
Please sign in to comment.