-
Notifications
You must be signed in to change notification settings - Fork 0
/
prediction_notebook.ipynb
139 lines (139 loc) · 3.77 KB
/
prediction_notebook.ipynb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The prediction is a simpler process. Since we have our neural net trained and the weights saves on weights.pickle you need just to do a forward propagation with our new data and see the results. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we import some libraries and we define the functions we defined before."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pickle\n",
"import sys\n",
"import numpy as np\n",
"\n",
"\"\"\"sigmoid function and its derivitive\"\"\"\n",
"def nonlin(x,deriv=False):\n",
"\n",
"\tif (deriv==True):\n",
"\t\treturn x*(1-x)\n",
"\n",
"\treturn 1/(1+np.exp(-x)) \n",
"\n",
"\"\"\"Compute softmax values for each sets of scores in x.\"\"\"\n",
"def softmax(x):\n",
"\treturn np.exp(x) / np.sum(np.exp(x), axis=0)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we load the pickle. It's important to have train the model first with some data, otherwise we'll not be able to predict (and weight.picle will not exists). "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#loads a picle file with the weights of the neural net \n",
"with open('weights.pickle') as f: # Python 3: open(..., 'rb')\n",
" syn0, syn1 = pickle.load(f)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this step we are doing the same preprocessing as in the train.py. We tokenize our data (comming as argument from command line). In the end we have the realPredictionInput, 1x3 vector with the data you want to feed the neural net to discover the prediction. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inputToPredictStr = sys.argv[1]\n",
" \n",
"#tokenize a list-like string \n",
"day = int( inputToPredictStr.split(\",\")[0].replace('[',\"\").replace(']',\"\") )\n",
"time = int( inputToPredictStr.split(\",\")[1].replace('[',\"\").replace(']',\"\") )\n",
"store_id = int( inputToPredictStr.split(\",\")[2].replace('[',\"\").replace(']',\"\") )\n",
"\n",
"\n",
"realPredictionInput = [ day, time, store_id]\n",
"\n",
"realPredictionInput = np.array(realPredictionInput)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The final step is just a simply feed forward propagation. After the matrix multiplications completes, we have the prediction! We read that form the android project so you'll be able to see it! "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#passing data thought the neural network \n",
"l1new = nonlin(np.dot(realPredictionInput,syn0)) #layer1 \n",
"l2new = nonlin(np.dot(l1new,syn1)) #layer2\n",
"\n",
"#aply the softmax for normalization\n",
"l2new=softmax(l2new)\n",
"\n",
"prediction = l2new.argmax()\n",
"\n",
"print \"{\\\"results\\\":[{\\\"pred\\\":\\\"\" , prediction, \"\\\"\", \"}]}\""
]
}
],
"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.5.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}