Skip to content

Instantly share code, notes, and snippets.

@awjuliani
Last active March 24, 2021 07:38
Show Gist options
  • Star 14 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save awjuliani/1256e7ad7c8ac54051d09963606c8a47 to your computer and use it in GitHub Desktop.
Save awjuliani/1256e7ad7c8ac54051d09963606c8a47 to your computer and use it in GitHub Desktop.
Reinforcement Learning Tutorial in Tensorflow: Model-based RL
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simple Reinforcement Learning with Tensorflow: Part 3 - Model-Based RL\n",
"In this iPython notebook we implement a policy and model network which work in tandem to solve the CartPole reinforcement learning problem. To learn more, read here: https://medium.com/p/9a6fe0cce99\n",
"\n",
"For more reinforcment learning tutorials, see:\n",
"https://github.com/awjuliani/DeepRL-Agents"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Loading libraries and starting CartPole environment"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import cPickle as pickle\n",
"import tensorflow as tf\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import math\n",
"\n",
"from modelAny import *\n",
"\n",
"from tensorflow.python.framework import dtypes\n",
"from tensorflow.python.framework import ops\n",
"from tensorflow.python.ops import array_ops\n",
"from tensorflow.python.ops import control_flow_ops\n",
"from tensorflow.python.ops import embedding_ops\n",
"from tensorflow.python.ops import math_ops\n",
"from tensorflow.python.ops import nn_ops\n",
"from tensorflow.python.ops import rnn\n",
"from tensorflow.python.ops import rnn_cell\n",
"from tensorflow.python.ops import variable_scope"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO:gym.envs.registration:Making new env: CartPole-v0\n",
"[2016-07-26 11:29:37,204] Making new env: CartPole-v0\n"
]
}
],
"source": [
"import gym\n",
"env = gym.make('CartPole-v0')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Setting Hyper-parameters"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# hyperparameters\n",
"H = 8 # number of hidden layer neurons\n",
"learning_rate = 1e-2\n",
"gamma = 0.99 # discount factor for reward\n",
"decay_rate = 0.99 # decay factor for RMSProp leaky sum of grad^2\n",
"resume = False # resume from previous checkpoint?\n",
"\n",
"model_bs = 3 # Batch size when learning from model\n",
"real_bs = 3 # Batch size when learning from real environment\n",
"\n",
"# model initialization\n",
"D = 4 # input dimensionality"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Policy Network"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"tf.reset_default_graph()\n",
"observations = tf.placeholder(tf.float32, [None,4] , name=\"input_x\")\n",
"W1 = tf.get_variable(\"W1\", shape=[4, H],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"layer1 = tf.nn.relu(tf.matmul(observations,W1))\n",
"W2 = tf.get_variable(\"W2\", shape=[H, 1],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"score = tf.matmul(layer1,W2)\n",
"probability = tf.nn.sigmoid(score)\n",
"\n",
"tvars = tf.trainable_variables()\n",
"input_y = tf.placeholder(tf.float32,[None,1], name=\"input_y\")\n",
"advantages = tf.placeholder(tf.float32,name=\"reward_signal\")\n",
"adam = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"W1Grad = tf.placeholder(tf.float32,name=\"batch_grad1\")\n",
"W2Grad = tf.placeholder(tf.float32,name=\"batch_grad2\")\n",
"batchGrad = [W1Grad,W2Grad]\n",
"loglik = tf.log(input_y*(input_y - probability) + (1 - input_y)*(input_y + probability))\n",
"loss = -tf.reduce_mean(loglik * advantages) \n",
"newGrads = tf.gradients(loss,tvars)\n",
"updateGrads = adam.apply_gradients(zip(batchGrad,tvars))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Model Network\n",
"Here we implement a multi-layer neural network that predicts the next observation, reward, and done state from a current state and action."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"mH = 256 # model layer size\n",
"\n",
"input_data = tf.placeholder(tf.float32, [None, 5])\n",
"with tf.variable_scope('rnnlm'):\n",
" softmax_w = tf.get_variable(\"softmax_w\", [mH, 50])\n",
" softmax_b = tf.get_variable(\"softmax_b\", [50])\n",
"\n",
"previous_state = tf.placeholder(tf.float32, [None,5] , name=\"previous_state\")\n",
"W1M = tf.get_variable(\"W1M\", shape=[5, mH],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"B1M = tf.Variable(tf.zeros([mH]),name=\"B1M\")\n",
"layer1M = tf.nn.relu(tf.matmul(previous_state,W1M) + B1M)\n",
"W2M = tf.get_variable(\"W2M\", shape=[mH, mH],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"B2M = tf.Variable(tf.zeros([mH]),name=\"B2M\")\n",
"layer2M = tf.nn.relu(tf.matmul(layer1M,W2M) + B2M)\n",
"wO = tf.get_variable(\"wO\", shape=[mH, 4],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"wR = tf.get_variable(\"wR\", shape=[mH, 1],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"wD = tf.get_variable(\"wD\", shape=[mH, 1],\n",
" initializer=tf.contrib.layers.xavier_initializer())\n",
"\n",
"bO = tf.Variable(tf.zeros([4]),name=\"bO\")\n",
"bR = tf.Variable(tf.zeros([1]),name=\"bR\")\n",
"bD = tf.Variable(tf.ones([1]),name=\"bD\")\n",
"\n",
"\n",
"predicted_observation = tf.matmul(layer2M,wO,name=\"predicted_observation\") + bO\n",
"predicted_reward = tf.matmul(layer2M,wR,name=\"predicted_reward\") + bR\n",
"predicted_done = tf.sigmoid(tf.matmul(layer2M,wD,name=\"predicted_done\") + bD)\n",
"\n",
"true_observation = tf.placeholder(tf.float32,[None,4],name=\"true_observation\")\n",
"true_reward = tf.placeholder(tf.float32,[None,1],name=\"true_reward\")\n",
"true_done = tf.placeholder(tf.float32,[None,1],name=\"true_done\")\n",
"\n",
"\n",
"predicted_state = tf.concat(1,[predicted_observation,predicted_reward,predicted_done])\n",
"\n",
"observation_loss = tf.square(true_observation - predicted_observation)\n",
"\n",
"reward_loss = tf.square(true_reward - predicted_reward)\n",
"\n",
"done_loss = tf.mul(predicted_done, true_done) + tf.mul(1-predicted_done, 1-true_done)\n",
"done_loss = -tf.log(done_loss)\n",
"\n",
"model_loss = tf.reduce_mean(observation_loss + done_loss + reward_loss)\n",
"\n",
"modelAdam = tf.train.AdamOptimizer(learning_rate=learning_rate)\n",
"updateModel = modelAdam.minimize(model_loss)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Helper-functions"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def resetGradBuffer(gradBuffer):\n",
" for ix,grad in enumerate(gradBuffer):\n",
" gradBuffer[ix] = grad * 0\n",
" return gradBuffer\n",
" \n",
"def discount_rewards(r):\n",
" \"\"\" take 1D float array of rewards and compute discounted reward \"\"\"\n",
" discounted_r = np.zeros_like(r)\n",
" running_add = 0\n",
" for t in reversed(xrange(0, r.size)):\n",
" running_add = running_add * gamma + r[t]\n",
" discounted_r[t] = running_add\n",
" return discounted_r\n",
"\n",
"\n",
"# This function uses our model to produce a new state when given a previous state and action\n",
"def stepModel(sess, xs, action):\n",
" toFeed = np.reshape(np.hstack([xs[-1][0],np.array(action)]),[1,5])\n",
" myPredict = sess.run([predicted_state],feed_dict={previous_state: toFeed})\n",
" reward = myPredict[0][:,4]\n",
" observation = myPredict[0][:,0:4]\n",
" observation[:,0] = np.clip(observation[:,0],-2.4,2.4)\n",
" observation[:,2] = np.clip(observation[:,2],-0.4,0.4)\n",
" doneP = np.clip(myPredict[0][:,5],0,1)\n",
" if doneP > 0.1 or len(xs)>= 300:\n",
" done = True\n",
" else:\n",
" done = False\n",
" return observation, reward, done"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training the Policy and Model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"World Perf: Episode 4.000000. Reward 34.666667. action: 1.000000. mean reward 34.666667.\n",
"World Perf: Episode 7.000000. Reward 18.333333. action: 1.000000. mean reward 34.503333.\n",
"World Perf: Episode 10.000000. Reward 30.666667. action: 1.000000. mean reward 34.464967.\n",
"World Perf: Episode 13.000000. Reward 34.333333. action: 0.000000. mean reward 34.463650.\n",
"World Perf: Episode 16.000000. Reward 39.666667. action: 0.000000. mean reward 34.515680.\n",
"World Perf: Episode 19.000000. Reward 20.000000. action: 0.000000. mean reward 34.370524.\n",
"World Perf: Episode 22.000000. Reward 30.333333. action: 0.000000. mean reward 34.330152.\n",
"World Perf: Episode 25.000000. Reward 20.333333. action: 1.000000. mean reward 34.190184.\n",
"World Perf: Episode 28.000000. Reward 19.333333. action: 1.000000. mean reward 34.041615.\n",
"World Perf: Episode 31.000000. Reward 32.333333. action: 0.000000. mean reward 34.024532.\n",
"World Perf: Episode 34.000000. Reward 26.333333. action: 0.000000. mean reward 33.947620.\n",
"World Perf: Episode 37.000000. Reward 25.000000. action: 0.000000. mean reward 33.858144.\n",
"World Perf: Episode 40.000000. Reward 41.000000. action: 1.000000. mean reward 33.929563.\n",
"World Perf: Episode 43.000000. Reward 26.333333. action: 1.000000. mean reward 33.853600.\n",
"World Perf: Episode 46.000000. Reward 25.333333. action: 0.000000. mean reward 33.768398.\n",
"World Perf: Episode 49.000000. Reward 22.000000. action: 0.000000. mean reward 33.650714.\n",
"World Perf: Episode 52.000000. Reward 35.666667. action: 1.000000. mean reward 33.670873.\n",
"World Perf: Episode 55.000000. Reward 30.000000. action: 1.000000. mean reward 33.634165.\n",
"World Perf: Episode 58.000000. Reward 29.000000. action: 1.000000. mean reward 33.587823.\n",
"World Perf: Episode 61.000000. Reward 31.666667. action: 1.000000. mean reward 33.568611.\n",
"World Perf: Episode 64.000000. Reward 29.000000. action: 0.000000. mean reward 33.522925.\n",
"World Perf: Episode 67.000000. Reward 27.000000. action: 0.000000. mean reward 33.457696.\n",
"World Perf: Episode 70.000000. Reward 58.333333. action: 1.000000. mean reward 33.706452.\n",
"World Perf: Episode 73.000000. Reward 29.333333. action: 0.000000. mean reward 33.662721.\n",
"World Perf: Episode 76.000000. Reward 12.333333. action: 0.000000. mean reward 33.449427.\n",
"World Perf: Episode 79.000000. Reward 25.000000. action: 0.000000. mean reward 33.364933.\n",
"World Perf: Episode 82.000000. Reward 21.666667. action: 1.000000. mean reward 33.247950.\n",
"World Perf: Episode 85.000000. Reward 27.333333. action: 0.000000. mean reward 33.188804.\n",
"World Perf: Episode 88.000000. Reward 34.000000. action: 1.000000. mean reward 33.196916.\n",
"World Perf: Episode 91.000000. Reward 22.333333. action: 0.000000. mean reward 33.088280.\n",
"World Perf: Episode 94.000000. Reward 43.000000. action: 1.000000. mean reward 33.187397.\n",
"World Perf: Episode 97.000000. Reward 14.000000. action: 0.000000. mean reward 32.995523.\n",
"World Perf: Episode 100.000000. Reward 19.000000. action: 1.000000. mean reward 32.855568.\n",
"World Perf: Episode 103.000000. Reward 23.333333. action: 1.000000. mean reward 32.760346.\n",
"World Perf: Episode 106.000000. Reward 41.666667. action: 0.000000. mean reward 32.733059.\n",
"World Perf: Episode 109.000000. Reward 48.000000. action: 1.000000. mean reward 32.898281.\n",
"World Perf: Episode 112.000000. Reward 17.000000. action: 1.000000. mean reward 33.378304.\n",
"World Perf: Episode 115.000000. Reward 52.333333. action: 0.000000. mean reward 33.407272.\n",
"World Perf: Episode 118.000000. Reward 16.000000. action: 1.000000. mean reward 32.948177.\n",
"World Perf: Episode 121.000000. Reward 22.000000. action: 0.000000. mean reward 32.596844.\n",
"World Perf: Episode 124.000000. Reward 30.000000. action: 1.000000. mean reward 32.334019.\n",
"World Perf: Episode 127.000000. Reward 22.666667. action: 1.000000. mean reward 31.985229.\n",
"World Perf: Episode 130.000000. Reward 75.333333. action: 1.000000. mean reward 32.219444.\n",
"World Perf: Episode 133.000000. Reward 37.666667. action: 0.000000. mean reward 32.033123.\n",
"World Perf: Episode 136.000000. Reward 34.666667. action: 1.000000. mean reward 36.278812.\n",
"World Perf: Episode 139.000000. Reward 44.333333. action: 0.000000. mean reward 37.793564.\n",
"World Perf: Episode 142.000000. Reward 43.000000. action: 0.000000. mean reward 37.605556.\n",
"World Perf: Episode 145.000000. Reward 17.333333. action: 0.000000. mean reward 37.140411.\n",
"World Perf: Episode 148.000000. Reward 58.000000. action: 0.000000. mean reward 37.012058.\n",
"World Perf: Episode 151.000000. Reward 54.000000. action: 0.000000. mean reward 36.910122.\n",
"World Perf: Episode 154.000000. Reward 43.666667. action: 0.000000. mean reward 36.677944.\n",
"World Perf: Episode 157.000000. Reward 49.666667. action: 1.000000. mean reward 36.497761.\n",
"World Perf: Episode 160.000000. Reward 33.333333. action: 1.000000. mean reward 36.195156.\n",
"World Perf: Episode 163.000000. Reward 26.333333. action: 0.000000. mean reward 35.835846.\n",
"World Perf: Episode 166.000000. Reward 36.333333. action: 0.000000. mean reward 35.844830.\n",
"World Perf: Episode 169.000000. Reward 28.333333. action: 1.000000. mean reward 35.657898.\n",
"World Perf: Episode 172.000000. Reward 47.333333. action: 1.000000. mean reward 35.645672.\n",
"World Perf: Episode 175.000000. Reward 54.000000. action: 1.000000. mean reward 35.669083.\n",
"World Perf: Episode 178.000000. Reward 39.666667. action: 1.000000. mean reward 35.657860.\n",
"World Perf: Episode 181.000000. Reward 29.000000. action: 0.000000. mean reward 36.254162.\n",
"World Perf: Episode 184.000000. Reward 40.333333. action: 1.000000. mean reward 38.040600.\n",
"World Perf: Episode 187.000000. Reward 47.000000. action: 1.000000. mean reward 39.061661.\n",
"World Perf: Episode 190.000000. Reward 50.666667. action: 0.000000. mean reward 40.936543.\n",
"World Perf: Episode 193.000000. Reward 41.666667. action: 1.000000. mean reward 41.026863.\n",
"World Perf: Episode 196.000000. Reward 39.666667. action: 0.000000. mean reward 42.870926.\n",
"World Perf: Episode 199.000000. Reward 40.333333. action: 1.000000. mean reward 43.584274.\n",
"World Perf: Episode 202.000000. Reward 37.333333. action: 0.000000. mean reward 43.347317.\n",
"World Perf: Episode 205.000000. Reward 40.333333. action: 0.000000. mean reward 44.021179.\n",
"World Perf: Episode 208.000000. Reward 21.333333. action: 1.000000. mean reward 43.482227.\n",
"World Perf: Episode 211.000000. Reward 41.666667. action: 0.000000. mean reward 43.259212.\n",
"World Perf: Episode 214.000000. Reward 34.000000. action: 1.000000. mean reward 44.416565.\n",
"World Perf: Episode 217.000000. Reward 34.666667. action: 0.000000. mean reward 44.088322.\n",
"World Perf: Episode 220.000000. Reward 34.666667. action: 1.000000. mean reward 44.904999.\n",
"World Perf: Episode 223.000000. Reward 47.333333. action: 1.000000. mean reward 44.721806.\n",
"World Perf: Episode 226.000000. Reward 44.666667. action: 1.000000. mean reward 45.130310.\n",
"World Perf: Episode 229.000000. Reward 43.333333. action: 0.000000. mean reward 44.777817.\n",
"World Perf: Episode 232.000000. Reward 43.333333. action: 0.000000. mean reward 44.769470.\n",
"World Perf: Episode 235.000000. Reward 44.333333. action: 0.000000. mean reward 46.332897.\n",
"World Perf: Episode 238.000000. Reward 45.000000. action: 1.000000. mean reward 45.947269.\n",
"World Perf: Episode 241.000000. Reward 54.666667. action: 0.000000. mean reward 46.343395.\n",
"World Perf: Episode 244.000000. Reward 24.000000. action: 1.000000. mean reward 45.764530.\n",
"World Perf: Episode 247.000000. Reward 34.333333. action: 1.000000. mean reward 45.315842.\n",
"World Perf: Episode 250.000000. Reward 48.333333. action: 0.000000. mean reward 45.853481.\n",
"World Perf: Episode 253.000000. Reward 67.333333. action: 0.000000. mean reward 45.776394.\n",
"World Perf: Episode 256.000000. Reward 34.000000. action: 1.000000. mean reward 47.594440.\n",
"World Perf: Episode 259.000000. Reward 38.333333. action: 0.000000. mean reward 47.181637.\n",
"World Perf: Episode 262.000000. Reward 66.000000. action: 0.000000. mean reward 47.100784.\n",
"World Perf: Episode 265.000000. Reward 34.333333. action: 0.000000. mean reward 46.671185.\n",
"World Perf: Episode 268.000000. Reward 37.666667. action: 1.000000. mean reward 46.222218.\n",
"World Perf: Episode 271.000000. Reward 32.333333. action: 1.000000. mean reward 45.771107.\n",
"World Perf: Episode 274.000000. Reward 47.666667. action: 1.000000. mean reward 45.407619.\n",
"World Perf: Episode 277.000000. Reward 59.000000. action: 1.000000. mean reward 46.145554.\n",
"World Perf: Episode 280.000000. Reward 63.333333. action: 0.000000. mean reward 59.825062.\n",
"World Perf: Episode 283.000000. Reward 34.666667. action: 1.000000. mean reward 61.017429.\n",
"World Perf: Episode 286.000000. Reward 44.000000. action: 1.000000. mean reward 60.357105.\n",
"World Perf: Episode 289.000000. Reward 59.333333. action: 1.000000. mean reward 65.682976.\n",
"World Perf: Episode 292.000000. Reward 41.333333. action: 1.000000. mean reward 65.250412.\n",
"World Perf: Episode 295.000000. Reward 24.666667. action: 1.000000. mean reward 68.016304.\n",
"World Perf: Episode 298.000000. Reward 81.000000. action: 0.000000. mean reward 67.736053.\n",
"World Perf: Episode 301.000000. Reward 50.000000. action: 1.000000. mean reward 69.622490.\n",
"World Perf: Episode 304.000000. Reward 51.333333. action: 1.000000. mean reward 69.084587.\n",
"World Perf: Episode 307.000000. Reward 59.666667. action: 0.000000. mean reward 68.367020.\n",
"World Perf: Episode 310.000000. Reward 50.000000. action: 1.000000. mean reward 67.690346.\n",
"World Perf: Episode 313.000000. Reward 40.666667. action: 0.000000. mean reward 66.820183.\n",
"World Perf: Episode 316.000000. Reward 36.333333. action: 0.000000. mean reward 65.936417."
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING:gym.core:Observation '[-2.44450251 -2.42356798 -0.16837024 0.5882781 ]' is not contained within observation space 'Box(4,)'.\n",
"[2016-07-26 11:31:53,950] Observation '[-2.44450251 -2.42356798 -0.16837024 0.5882781 ]' is not contained within observation space 'Box(4,)'.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"World Perf: Episode 319.000000. Reward 66.666667. action: 0.000000. mean reward 65.364967.\n",
"World Perf: Episode 322.000000. Reward 65.333333. action: 1.000000. mean reward 64.802299.\n",
"World Perf: Episode 325.000000. Reward 37.333333. action: 0.000000. mean reward 66.096016.\n",
"World Perf: Episode 328.000000. Reward 69.333333. action: 0.000000. mean reward 66.710442.\n",
"World Perf: Episode 331.000000. Reward 62.333333. action: 0.000000. mean reward 66.162369.\n",
"World Perf: Episode 334.000000. Reward 47.666667. action: 0.000000. mean reward 65.585594.\n",
"World Perf: Episode 337.000000. Reward 51.333333. action: 1.000000. mean reward 67.923607.\n",
"World Perf: Episode 340.000000. Reward 79.666667. action: 0.000000. mean reward 67.730087.\n",
"World Perf: Episode 343.000000. Reward 46.333333. action: 1.000000. mean reward 67.174133.\n",
"World Perf: Episode 346.000000. Reward 37.333333. action: 0.000000. mean reward 67.237823.\n",
"World Perf: Episode 349.000000. Reward 37.666667. action: 1.000000. mean reward 66.365395.\n",
"World Perf: Episode 352.000000. Reward 106.000000. action: 1.000000. mean reward 66.240921.\n",
"World Perf: Episode 355.000000. Reward 69.666667. action: 0.000000. mean reward 65.685989.\n",
"World Perf: Episode 358.000000. Reward 79.000000. action: 0.000000. mean reward 65.385353.\n",
"World Perf: Episode 361.000000. Reward 57.666667. action: 0.000000. mean reward 64.762840.\n",
"World Perf: Episode 364.000000. Reward 58.333333. action: 1.000000. mean reward 64.234383.\n",
"World Perf: Episode 367.000000. Reward 50.000000. action: 1.000000. mean reward 63.548519.\n",
"World Perf: Episode 370.000000. Reward 76.666667. action: 1.000000. mean reward 64.027878.\n",
"World Perf: Episode 373.000000. Reward 77.000000. action: 1.000000. mean reward 63.644070.\n",
"World Perf: Episode 376.000000. Reward 57.333333. action: 0.000000. mean reward 62.986038.\n",
"World Perf: Episode 379.000000. Reward 60.333333. action: 1.000000. mean reward 65.628548.\n",
"World Perf: Episode 382.000000. Reward 58.000000. action: 0.000000. mean reward 65.577202.\n",
"World Perf: Episode 385.000000. Reward 37.333333. action: 0.000000. mean reward 64.748459.\n",
"World Perf: Episode 388.000000. Reward 66.666667. action: 1.000000. mean reward 64.282372.\n",
"World Perf: Episode 391.000000. Reward 76.666667. action: 0.000000. mean reward 63.913193.\n",
"World Perf: Episode 394.000000. Reward 52.000000. action: 1.000000. mean reward 63.357983.\n",
"World Perf: Episode 397.000000. Reward 77.000000. action: 0.000000. mean reward 63.219463.\n",
"World Perf: Episode 400.000000. Reward 50.666667. action: 0.000000. mean reward 62.579128.\n",
"World Perf: Episode 403.000000. Reward 88.000000. action: 0.000000. mean reward 63.359425.\n",
"World Perf: Episode 406.000000. Reward 40.666667. action: 0.000000. mean reward 62.642246.\n",
"World Perf: Episode 409.000000. Reward 95.000000. action: 0.000000. mean reward 62.540451.\n",
"World Perf: Episode 412.000000. Reward 37.333333. action: 0.000000. mean reward 61.773060.\n",
"World Perf: Episode 415.000000. Reward 89.666667. action: 0.000000. mean reward 61.664021.\n",
"World Perf: Episode 418.000000. Reward 143.333333. action: 0.000000. mean reward 62.052608.\n",
"World Perf: Episode 421.000000. Reward 52.666667. action: 0.000000. mean reward 61.447842.\n",
"World Perf: Episode 424.000000. Reward 69.000000. action: 0.000000. mean reward 61.259960.\n",
"World Perf: Episode 427.000000. Reward 92.000000. action: 1.000000. mean reward 61.145710.\n",
"World Perf: Episode 430.000000. Reward 56.333333. action: 0.000000. mean reward 60.763550.\n",
"World Perf: Episode 433.000000. Reward 68.666667. action: 1.000000. mean reward 61.629684.\n",
"World Perf: Episode 436.000000. Reward 98.000000. action: 1.000000. mean reward 61.509510.\n",
"World Perf: Episode 439.000000. Reward 63.000000. action: 0.000000. mean reward 61.085052.\n",
"World Perf: Episode 442.000000. Reward 57.000000. action: 0.000000. mean reward 62.059277.\n",
"World Perf: Episode 445.000000. Reward 78.000000. action: 1.000000. mean reward 61.708813.\n",
"World Perf: Episode 448.000000. Reward 105.333333. action: 0.000000. mean reward 61.850525.\n",
"World Perf: Episode 451.000000. Reward 76.000000. action: 0.000000. mean reward 62.154224.\n",
"World Perf: Episode 454.000000. Reward 60.000000. action: 0.000000. mean reward 63.642593.\n",
"World Perf: Episode 457.000000. Reward 124.000000. action: 0.000000. mean reward 63.774948.\n",
"World Perf: Episode 460.000000. Reward 121.000000. action: 1.000000. mean reward 66.592888.\n",
"World Perf: Episode 463.000000. Reward 92.666667. action: 0.000000. mean reward 66.369972.\n",
"World Perf: Episode 466.000000. Reward 74.666667. action: 0.000000. mean reward 66.004295.\n",
"World Perf: Episode 469.000000. Reward 38.000000. action: 1.000000. mean reward 65.230652.\n",
"World Perf: Episode 472.000000. Reward 83.333333. action: 1.000000. mean reward 64.824677.\n",
"World Perf: Episode 475.000000. Reward 71.000000. action: 0.000000. mean reward 64.375679.\n",
"World Perf: Episode 478.000000. Reward 84.000000. action: 0.000000. mean reward 64.126076.\n",
"World Perf: Episode 481.000000. Reward 79.333333. action: 0.000000. mean reward 63.696423.\n",
"World Perf: Episode 484.000000. Reward 68.333333. action: 0.000000. mean reward 67.260323.\n",
"World Perf: Episode 487.000000. Reward 85.333333. action: 0.000000. mean reward 68.744957.\n",
"World Perf: Episode 490.000000. Reward 39.333333. action: 0.000000. mean reward 67.900719.\n",
"World Perf: Episode 493.000000. Reward 64.333333. action: 0.000000. mean reward 68.298889.\n",
"World Perf: Episode 496.000000. Reward 82.000000. action: 0.000000. mean reward 69.705017.\n",
"World Perf: Episode 499.000000. Reward 61.333333. action: 0.000000. mean reward 69.012932.\n",
"World Perf: Episode 502.000000. Reward 57.666667. action: 1.000000. mean reward 70.689323.\n",
"World Perf: Episode 505.000000. Reward 149.000000. action: 0.000000. mean reward 73.023964.\n",
"World Perf: Episode 508.000000. Reward 104.666667. action: 1.000000. mean reward 76.298637.\n",
"World Perf: Episode 511.000000. Reward 97.333333. action: 0.000000. mean reward 78.555893.\n",
"World Perf: Episode 514.000000. Reward 90.666667. action: 0.000000. mean reward 80.044609.\n",
"World Perf: Episode 517.000000. Reward 58.666667. action: 1.000000. mean reward 82.120979.\n",
"World Perf: Episode 520.000000. Reward 64.333333. action: 1.000000. mean reward 81.213943.\n",
"World Perf: Episode 523.000000. Reward 81.666667. action: 0.000000. mean reward 80.516701.\n",
"World Perf: Episode 526.000000. Reward 66.666667. action: 0.000000. mean reward 79.743752.\n",
"World Perf: Episode 529.000000. Reward 201.666667. action: 0.000000. mean reward 84.411575.\n",
"529\n"
]
}
],
"source": [
"xs,drs,ys,ds = [],[],[],[]\n",
"running_reward = None\n",
"reward_sum = 0\n",
"episode_number = 1\n",
"real_episodes = 1\n",
"init = tf.initialize_all_variables()\n",
"batch_size = real_bs\n",
"\n",
"drawFromModel = False # When set to True, will use model for observations\n",
"trainTheModel = True # Whether to train the model\n",
"trainThePolicy = False # Whether to train the policy\n",
"switch_point = 1\n",
"\n",
"# Launch the graph\n",
"with tf.Session() as sess:\n",
" rendering = False\n",
" sess.run(init)\n",
" observation = env.reset()\n",
" x = observation\n",
" gradBuffer = sess.run(tvars)\n",
" gradBuffer = resetGradBuffer(gradBuffer)\n",
" \n",
" while episode_number <= 5000:\n",
" # Start displaying environment once performance is acceptably high.\n",
" if (reward_sum/batch_size > 150 and drawFromModel == False) or rendering == True : \n",
" env.render()\n",
" rendering = True\n",
" \n",
" x = np.reshape(observation,[1,4])\n",
"\n",
" tfprob = sess.run(probability,feed_dict={observations: x})\n",
" action = 1 if np.random.uniform() < tfprob else 0\n",
"\n",
" # record various intermediates (needed later for backprop)\n",
" xs.append(x) \n",
" y = 1 if action == 0 else 0 \n",
" ys.append(y)\n",
" \n",
" # step the model or real environment and get new measurements\n",
" if drawFromModel == False:\n",
" observation, reward, done, info = env.step(action)\n",
" else:\n",
" observation, reward, done = stepModel(sess,xs,action)\n",
" \n",
" reward_sum += reward\n",
" \n",
" ds.append(done*1)\n",
" drs.append(reward) # record reward (has to be done after we call step() to get reward for previous action)\n",
"\n",
" if done: \n",
" \n",
" if drawFromModel == False: \n",
" real_episodes += 1\n",
" episode_number += 1\n",
"\n",
" # stack together all inputs, hidden states, action gradients, and rewards for this episode\n",
" epx = np.vstack(xs)\n",
" epy = np.vstack(ys)\n",
" epr = np.vstack(drs)\n",
" epd = np.vstack(ds)\n",
" xs,drs,ys,ds = [],[],[],[] # reset array memory\n",
" \n",
" if trainTheModel == True:\n",
" actions = np.array([np.abs(y-1) for y in epy][:-1])\n",
" state_prevs = epx[:-1,:]\n",
" state_prevs = np.hstack([state_prevs,actions])\n",
" state_nexts = epx[1:,:]\n",
" rewards = np.array(epr[1:,:])\n",
" dones = np.array(epd[1:,:])\n",
" state_nextsAll = np.hstack([state_nexts,rewards,dones])\n",
"\n",
" feed_dict={previous_state: state_prevs, true_observation: state_nexts,true_done:dones,true_reward:rewards}\n",
" loss,pState,_ = sess.run([model_loss,predicted_state,updateModel],feed_dict)\n",
" if trainThePolicy == True:\n",
" discounted_epr = discount_rewards(epr).astype('float32')\n",
" discounted_epr -= np.mean(discounted_epr)\n",
" discounted_epr /= np.std(discounted_epr)\n",
" tGrad = sess.run(newGrads,feed_dict={observations: epx, input_y: epy, advantages: discounted_epr})\n",
" \n",
" # If gradients becom too large, end training process\n",
" if np.sum(tGrad[0] == tGrad[0]) == 0:\n",
" break\n",
" for ix,grad in enumerate(tGrad):\n",
" gradBuffer[ix] += grad\n",
" \n",
" if switch_point + batch_size == episode_number: \n",
" switch_point = episode_number\n",
" if trainThePolicy == True:\n",
" sess.run(updateGrads,feed_dict={W1Grad: gradBuffer[0],W2Grad:gradBuffer[1]})\n",
" gradBuffer = resetGradBuffer(gradBuffer)\n",
"\n",
" running_reward = reward_sum if running_reward is None else running_reward * 0.99 + reward_sum * 0.01\n",
" if drawFromModel == False:\n",
" print 'World Perf: Episode %f. Reward %f. action: %f. mean reward %f.' % (real_episodes,reward_sum/real_bs,action, running_reward/real_bs)\n",
" if reward_sum/batch_size > 200:\n",
" break\n",
" reward_sum = 0\n",
"\n",
" # Once the model has been trained on 100 episodes, we start alternating between training the policy\n",
" # from the model and training the model from the real environment.\n",
" if episode_number > 100:\n",
" drawFromModel = not drawFromModel\n",
" trainTheModel = not trainTheModel\n",
" trainThePolicy = not trainThePolicy\n",
" \n",
" if drawFromModel == True:\n",
" observation = np.random.uniform(-0.1,0.1,[4]) # Generate reasonable starting point\n",
" batch_size = model_bs\n",
" else:\n",
" observation = env.reset()\n",
" batch_size = real_bs\n",
" \n",
"print real_episodes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Checking model representation\n",
"Here we can examine how well the model is able to approximate the true environment after training. The green line indicates the real environment, and the blue indicates model predictions."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nwQXNcZyqwQXNcZyqwQXNcZyqwQXNcZyqwQXNcZyqwQXNcZyqwQXNcZyqoayCli/lbto+vw3S7C4Q\nkeHltMdxnOqm3B7a7UDO0rci8hVggKruBZwN3FJmexzHqWLKKmhqFdA/zLPLccCdwb5/B7qFeaMc\nx3FaS9x9aHGnIHYcp4qIW9Acx3Eio+TK6SVScNrfoLq64zhVjKrmq5XRIpXw0DLTEaczFTgVQERG\nAxs1qI6TjUplPS3kdfnll8duQxJtcXvaji2l2vOth77F/Yvuj8yWKCirhyYi92L1I3cWkdVYdZfO\ngKrqbar6uIhMFpE3sIpBZ5TTHsdxomNr41Y61sTdyGtKWa1R1VMK2OfcctrgOE55SKKg+aBAkYwf\nPz5uE74gSbaA25OPJNkCpdmTREFrM0VSRETbiq2O0x6YdPckLhh9AZMG5oydbxUigraBQQHHcaqQ\nJHpoLmiO4xSFC5rjOFWDC5rjOFWDC5rjOFWDC5rjOFWDC5rjOFWDC5rjOFWDC5rjOFWDC5rjOFWD\nC5rjOFWDC5rjOFVDuxQ0ETlaRJaKyDIRuTjL9p1FZFpQxm6RiJxebpscxymddidoIlID3IiVsvsy\ncLKIDMnY7VxggaoOBw4HfikiybpKjuM0o90JGjASWK6qb6lqPXA/VrounXeAHYL3OwDvq+rWMtvl\nOE6JJFHQym1NZpm6tZjIpfM74GkRWQd0BU4ss02O40RAEgUtCYMClwKvququwP7ATSLSNWabHMdp\ngSQKWrmtqQP2SFvOVqZuDPBzAFVdISKrgCHAnMyDXXHFFV+8Hz9+fOLSGTtOe6FRG2nURmqkeJ9o\n5syZzJw5MzqjKHMKbhHpANQCRwJvA68AJ6vqkrR9fgn8Q1WvFJGemJANU9UPMo7lKbgdJyHUN9TT\n5eou1P+kPrJjRpGCu9xVnxpE5FxgOta8/b2qLhGRswlK2QHXALeLyKtY/c4fZ4qZ4zjJIonNTahA\n5XRVfQIYnLHu1rT37wFfK7cdjuNER1IFLQmDAo7jtDFc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc\n0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRpc0BzHqRraraC1\nVMYu2Ge8iMwXkddE5Nly2+Q4TmkkVdDKalFaGbsjgXXAbBGZoqpL0/bpBtwETFTVOhHZpZw2OY5T\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c1ef9d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 12))\n",
"for i in range(6):\n",
" plt.subplot(6, 2, 2*i + 1)\n",
" plt.plot(pState[:,i])\n",
" plt.subplot(6,2,2*i+1)\n",
" plt.plot(state_nextsAll[:,i])\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
@krystynak
Copy link

The actions shape can be (0,) i.e. empty and there will be a ValueError when
state_prevs = np.hstack([state_prevs, actions])

I see this error most of the time, and am not sure what to do
when the actions is empty.

World Perf: Episode 106.000000. Reward 15.333333. action: 0.000000. mean reward 24.393341.
actions shape: (1, 1)
state_prevs shape: (1, 4)
actions shape: (0,)
state_prevs shape: (0, 4)
Traceback (most recent call last):
File "ReLearn/rltut3.py", line 191, in
state_prevs = np.hstack([state_prevs,actions])
File "/Users/john/Work/TF/lib/python2.7/site-packages/numpy/core/shape_base.py", line 280, in hstack
return _nx.concatenate(arrs, 1)
ValueError: all the input arrays must have same number of dimensions

@breeko
Copy link

breeko commented Dec 27, 2016

@krystynak
Your actions shape has to have a second dimension. For instance, below work and will result in 0,5 empty array:

np.hstack([np.empty(0).reshape(0,4), np.empty(0).reshape(0,1)])

While below will give you your error:

np.hstack([np.empty(0).reshape(0,4),np.empty(0).reshape(0,)])

I wold reshape actions to (-1,1) or initialize it as np.empty(0).reshape(0,1) and append using np.vstack

@Santara
Copy link

Santara commented Feb 21, 2017

Hi Arthur,

Thank you very much for making these tutorials! They are awesome!

However there seems to be a number of incompatibilities/bugs in this notebook. I had to make the following modifications to get the notebook running on Tensorflow 1.0.0:

  1. I had to comment out the line: from modelAny import * because neither was any script by the name modelAny provided, nor were any of the resources of the script required by the rest of the code.
  2. rnn_cell seems to be removed from tensorflow.python.ops in the current generation. Also this was never used in the rest of the code. So I commented out from tensorflow.python.ops import rnn_cell.
  3. tf.concat() has a different syntax now. I had to make the following modification:
    predicted_state = tf.concat([predicted_observation,predicted_reward,predicted_done],1)
  4. tf.mul() had to be replaced by tf.multiply() as follows:
    done_loss = tf.multiply(predicted_done, true_done) + tf.multiply(1-predicted_done, 1-true_done)

And everything executed as expected :)
Thank you
Anirban

@yangliu2
Copy link

RuntimeWarning: overflow encountered in multiply x = um.multiply(x, x, out=x).
Then the reward starts to have large values like 11062986271742011518222336.000000.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment