Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit dfb7d37

Browse files
Merge pull request #1 from energyfirefox/energyfirefox-patch-1
Fixed ValueError during model creation.
2 parents 4461953 + a989f3e commit dfb7d37

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed

‎Concept02_rnn.ipynb

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Ch `10`: Concept `02`"
8+
]
9+
},
10+
{
11+
"cell_type": "markdown",
12+
"metadata": {},
13+
"source": [
14+
"## Recurrent Neural Network"
15+
]
16+
},
17+
{
18+
"cell_type": "markdown",
19+
"metadata": {},
20+
"source": [
21+
"Import the relevant libraries:"
22+
]
23+
},
24+
{
25+
"cell_type": "code",
26+
"execution_count": 1,
27+
"metadata": {},
28+
"outputs": [
29+
{
30+
"name": "stderr",
31+
"output_type": "stream",
32+
"text": [
33+
"/Users/anastasiia/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
34+
" from ._conv import register_converters as _register_converters\n"
35+
]
36+
}
37+
],
38+
"source": [
39+
"import numpy as np\n",
40+
"import tensorflow as tf\n",
41+
"from tensorflow.contrib import rnn"
42+
]
43+
},
44+
{
45+
"cell_type": "markdown",
46+
"metadata": {},
47+
"source": [
48+
"Define the RNN model:"
49+
]
50+
},
51+
{
52+
"cell_type": "code",
53+
"execution_count": 2,
54+
"metadata": {},
55+
"outputs": [],
56+
"source": [
57+
"class SeriesPredictor:\n",
58+
"\n",
59+
" def __init__(self, input_dim, seq_size, hidden_dim=10):\n",
60+
" # Hyperparameters\n",
61+
" self.input_dim = input_dim\n",
62+
" self.seq_size = seq_size\n",
63+
" self.hidden_dim = hidden_dim\n",
64+
"\n",
65+
" # Weight variables and input placeholders\n",
66+
" self.W_out = tf.Variable(tf.random_normal([hidden_dim, 1]), name='W_out')\n",
67+
" self.b_out = tf.Variable(tf.random_normal([1]), name='b_out')\n",
68+
" self.x = tf.placeholder(tf.float32, [None, seq_size, input_dim])\n",
69+
" self.y = tf.placeholder(tf.float32, [None, seq_size])\n",
70+
"\n",
71+
" # Cost optimizer\n",
72+
" self.cost = tf.reduce_mean(tf.square(self.model() - self.y))\n",
73+
" self.train_op = tf.train.AdamOptimizer().minimize(self.cost)\n",
74+
"\n",
75+
" # Auxiliary ops\n",
76+
" self.saver = tf.train.Saver()\n",
77+
"\n",
78+
" def model(self):\n",
79+
" \"\"\"\n",
80+
" :param x: inputs of size [T, batch_size, input_size]\n",
81+
" :param W: matrix of fully-connected output layer weights\n",
82+
" :param b: vector of fully-connected output layer biases\n",
83+
" \"\"\"\n",
84+
" cell = rnn.BasicLSTMCell(self.hidden_dim, reuse=tf.get_variable_scope().reuse)\n",
85+
" outputs, states = tf.nn.dynamic_rnn(cell, self.x, dtype=tf.float32)\n",
86+
" num_examples = tf.shape(self.x)[0]\n",
87+
" W_repeated = tf.tile(tf.expand_dims(self.W_out, 0), [num_examples, 1, 1])\n",
88+
" out = tf.matmul(outputs, W_repeated) + self.b_out\n",
89+
" out = tf.squeeze(out)\n",
90+
" return out\n",
91+
"\n",
92+
" def train(self, train_x, train_y):\n",
93+
" with tf.Session() as sess:\n",
94+
" tf.get_variable_scope().reuse_variables()\n",
95+
" sess.run(tf.global_variables_initializer())\n",
96+
" for i in range(1000):\n",
97+
" _, mse = sess.run([self.train_op, self.cost], feed_dict={self.x: train_x, self.y: train_y})\n",
98+
" if i % 100 == 0:\n",
99+
" print(i, mse)\n",
100+
" save_path = self.saver.save(sess, 'model.ckpt')\n",
101+
" print('Model saved to {}'.format(save_path))\n",
102+
"\n",
103+
" def test(self, test_x):\n",
104+
" with tf.Session() as sess:\n",
105+
" tf.get_variable_scope().reuse_variables()\n",
106+
" self.saver.restore(sess, './model.ckpt')\n",
107+
" output = sess.run(self.model(), feed_dict={self.x: test_x})\n",
108+
" return output\n",
109+
"\n",
110+
"\n"
111+
]
112+
},
113+
{
114+
"cell_type": "markdown",
115+
"metadata": {},
116+
"source": [
117+
"Now, we'll train a series predictor. Let's say we have a sequence of numbers `[a, b, c, d]` that we want to transform into `[a, a+b, b+c, c+d]`. We'll give the RNN a couple examples in the training data. Let's see how well it learns this intended transformation:"
118+
]
119+
},
120+
{
121+
"cell_type": "code",
122+
"execution_count": 3,
123+
"metadata": {},
124+
"outputs": [
125+
{
126+
"name": "stdout",
127+
"output_type": "stream",
128+
"text": [
129+
"0 70.91218\n",
130+
"100 28.614563\n",
131+
"200 10.268018\n",
132+
"300 5.664831\n",
133+
"400 3.5102208\n",
134+
"500 1.883831\n",
135+
"600 1.0723968\n",
136+
"700 0.6708067\n",
137+
"800 0.4667667\n",
138+
"900 0.35269937\n",
139+
"Model saved to model.ckpt\n",
140+
"INFO:tensorflow:Restoring parameters from ./model.ckpt\n",
141+
"\n",
142+
"Lets run some tests!\n",
143+
"\n",
144+
"When the input is [[1], [2], [3], [4]]\n",
145+
"The ground truth output should be [[1], [3], [5], [7]]\n",
146+
"And the model thinks it is [1.6758004 2.7610283 4.739178 7.087058 ]\n",
147+
"\n",
148+
"When the input is [[4], [5], [6], [7]]\n",
149+
"The ground truth output should be [[4], [9], [11], [13]]\n",
150+
"And the model thinks it is [ 4.4391885 9.112013 12.074081 13.157787 ]\n",
151+
"\n"
152+
]
153+
}
154+
],
155+
"source": [
156+
"if __name__ == '__main__':\n",
157+
" predictor = SeriesPredictor(input_dim=1, seq_size=4, hidden_dim=10)\n",
158+
" train_x = [[[1], [2], [5], [6]],\n",
159+
" [[5], [7], [7], [8]],\n",
160+
" [[3], [4], [5], [7]]]\n",
161+
" train_y = [[1, 3, 7, 11],\n",
162+
" [5, 12, 14, 15],\n",
163+
" [3, 7, 9, 12]]\n",
164+
" predictor.train(train_x, train_y)\n",
165+
"\n",
166+
" test_x = [[[1], [2], [3], [4]], # 1, 3, 5, 7\n",
167+
" [[4], [5], [6], [7]]] # 4, 9, 11, 13\n",
168+
" actual_y = [[[1], [3], [5], [7]],\n",
169+
" [[4], [9], [11], [13]]]\n",
170+
" pred_y = predictor.test(test_x)\n",
171+
" \n",
172+
" print(\"\\nLets run some tests!\\n\")\n",
173+
" \n",
174+
" for i, x in enumerate(test_x):\n",
175+
" print(\"When the input is {}\".format(x))\n",
176+
" print(\"The ground truth output should be {}\".format(actual_y[i]))\n",
177+
" print(\"And the model thinks it is {}\\n\".format(pred_y[i]))"
178+
]
179+
}
180+
],
181+
"metadata": {
182+
"kernelspec": {
183+
"display_name": "Python 3",
184+
"language": "python",
185+
"name": "python3"
186+
},
187+
"language_info": {
188+
"codemirror_mode": {
189+
"name": "ipython",
190+
"version": 3
191+
},
192+
"file_extension": ".py",
193+
"mimetype": "text/x-python",
194+
"name": "python",
195+
"nbconvert_exporter": "python",
196+
"pygments_lexer": "ipython3",
197+
"version": "3.6.5"
198+
}
199+
},
200+
"nbformat": 4,
201+
"nbformat_minor": 1
202+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /