-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME.html
493 lines (422 loc) · 23.1 KB
/
README.html
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
<!DOCTYPE html><html><head>
<title>README</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="file:////home/tomasz/.vscode/extensions/shd101wyy.markdown-preview-enhanced-0.4.0/node_modules/@shd101wyy/mume/dependencies/katex/katex.min.css">
<style>
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;
-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}
.token.comment,
.token.blockquote {
color: #969896;
}
.token.cdata {
color: #183691;
}
.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}
.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}
.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}
.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}
.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}
.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}
.token.entity {
cursor: help;
}
.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}
.token.list {
color: #ed6a43;
}
.token.inserted {
background-color: #eaffea;
color: #55a532;
}
.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
/* JSON */
.language-json .token.property {
color: #183691;
}
.language-markup .token.tag .token.punctuation {
color: #333;
}
/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}
/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}
code.language-yaml {
color: #183691;
}
/* Ruby */
.language-ruby .token.function {
color: #333;
}
/* Markdown */
.language-markdown .token.url {
color: #795da3;
}
/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}
.language-makefile .token.variable {
color: #183691;
}
.language-makefile .token.builtin {
color: #0086b3;
}
/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}
/* highlight */
pre[data-line] {
position: relative;
padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
position: absolute;
top: 0;
left: 0;
background-color: transparent;
display: block;
width: 100%;
}
pre[data-line] .line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: hsla(24, 20%, 50%,.08);
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
pointer-events: none;
line-height: inherit;
white-space: pre;
}
pre[data-line] .line-highlight:before,
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-start);
position: absolute;
top: .4em;
left: .6em;
min-width: 1em;
padding: 0 .5em;
background-color: hsla(24, 20%, 50%,.4);
color: hsl(24, 20%, 95%);
font: bold 65%/1.5 sans-serif;
text-align: center;
vertical-align: .3em;
border-radius: 999px;
text-shadow: none;
box-shadow: 0 1px white;
}
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-end);
top: auto;
bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
</style>
</head>
<body for="html-export">
<div class="mume markdown-preview ">
<center>
<h1>Luna Regression Tutorial</h1>
</center>
<p>Based on <a href="https://www.tensorflow.org/tutorials/keras/basic_regression">https://www.tensorflow.org/tutorials/keras/basic_regression</a></p>
<p>Dataset was downloaded from <a href="https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data">https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data</a> and it has been slightly modified to be loaded out of the box.</p>
<h2 class="mume-header" id="cloning-repository">Cloning repository.</h2>
<pre data-role="codeBlock" data-info="bash" class="language-bash"><span class="token function">git</span> clone https://github.com/Luna-Tensorflow/RegressionTutorial.git
<span class="token function">git</span> clone -b MNIST_tutorial https://github.com/Luna-Tensorflow/Luna-Tensorflow.git
<span class="token function">cd</span> RegressionTutorial
</pre><h2 class="mume-header" id="building-libraries">Building libraries.</h2>
<pre data-role="codeBlock" data-info="bash" class="language-bash"><span class="token function">cd</span> local_libs/Tensorflow/native_libs/
<span class="token function">mkdir</span> build
<span class="token function">cd</span> build
cmake <span class="token punctuation">..</span>/src
<span class="token function">make</span>
<span class="token function">cd</span> <span class="token punctuation">..</span>/<span class="token punctuation">..</span>/<span class="token punctuation">..</span>/<span class="token punctuation">..</span>
</pre><h2 class="mume-header" id="dataset">Dataset</h2>
<p>In this tutorial we will use slightly preprocessed dataset of cars parameters, to predict their fuel usage (MPG - <i>miles per galon</i>). The dataset is in a <code>.csv</code> format table with columns: <code>MPG</code>, <code>Cylinders</code>, <code>Displacement</code>, <code>Horsepower</code>, <code>Weight</code>, <code>Acceleration</code>, <code>Model Year</code> and <code>Origin</code>. The task is to predict value of first column, based on the rest of them. Due to unlinear influence, <code>Origin</code> column needs to be <i>one hot encoded</i>, so the last column will be replaced with three new columns: <code>USA</code>, <code>Europe</code>, <code>Japan</code>.</p>
<p><img src="Screenshots/dataSet.png" alt></p>
<p>To load dataset from <code>.csv</code> file, we will use Dataframes, which is Luna library allowing more comfortable work with big datasets (<a href="https://github.com/luna/dataframes">https://github.com/luna/dataframes</a>).</p>
<h2 class="mume-header" id="lets-start-with-luna-studio">Let's start with Luna Studio!</h2>
<p>At the beggining we need some imports.</p>
<pre data-role="codeBlock" data-info class="language-"><code>import Std.Base
import Dataframes.Table
import Dataframes.Column
import Tensorflow.Layers.Input
import Tensorflow.Layers.Dense
import Tensorflow.Optimizers.RMSProp
import Tensorflow.Losses.MeanError
import Tensorflow.Model
import Tensorflow.Tensor
import Tensorflow.Types
import Tensorflow.Operations
import Tensorflow.GeneratedOps
import RegressionTutorial.DblColumn
</code></pre><p>The size of dataset labels is the number of different cars parameters.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def nfeatures:
9
</code></pre><p>Function to extend given table with new column of zeros and ones, depending on values in column <code>Origin</code>.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def extendWith table name value:
table' = table.eachTo name (row: (row.at "Origin" == value).switch 0.0 1.0)
table'
</code></pre><p>Extending table with <i> one hot encoded </i> column <code>Origin</code>.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def oneHotOrigin table:
t1 = extendWith table "USA" 1
t2 = extendWith t1 "Europe" 2
t3 = extendWith t2 "Japan" 3
t3
</code></pre><p>We need a function that shuffles rows of given table, to balance dataset. Here the original table is extended with random column, sorted by this column, and then the random column is removed.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def shuffle table:
row = table.rowCount
rand = Tensors.random FloatType [row] 0.0 0.0
col = columnFromList "rand" (rand.toFlatList)
table1 = table.setAt "rand" col
table2 = table1.sort "rand"
table3 = table2.remove "rand"
table3
</code></pre><p><img src="Screenshots/suffle.png" alt></p>
<p>Function that divides dataset with given ratio, into test and train parts.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def sample table fracTest:
testCount = (fracTest * table.rowCount.toReal).floor
test = table.take testCount
train = table.drop testCount
(train, test)
</code></pre><p>Function that converts the Dataframes table into tensors list. It simply interprets table as two dimensional list, maps it to Luna <code>Real</code> type, transpose (because we need to flip columns and rows), and finally creates tensor of given shape, from each row.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def dataframeToTensorList shape table:
lst = table.toList . each (col: (col.toList).each (_.toReal))
t1 = Tensors.fromList2d FloatType lst
t2 = Tensors.transpose t1
lst' = Tensors.to2dList t2
samples = lst'.each(l: Tensors.fromList FloatType shape l)
samples
</code></pre><p><img src="Screenshots/dataframeToTensorList.png" alt></p>
<p>To estimate correctness of models predictions we use mean error.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def error model xBatch yBatch:
preds = model.evaluate xBatch
predsConst = Operations.makeConst preds
labelsConst = Operations.makeConst yBatch
diff = Operations.abs (predsConst - labelsConst)
error = Operations.mean diff [1]
error.eval.atIndex 0
</code></pre><p><img src="Screenshots/error.png" alt></p>
<p>Preparing data consists of three parts:</p>
<ul>
<li>
Loading data and <i> one hot encoding </i> last column,
</li>
<li>
Dividing train and test datasets into features and labels,
</li>
<li>
Converting Dataframe tables to tensors, and batching them.
</li>
</ul>
<pre data-role="codeBlock" data-info class="language-"><code>def prepareData path:
table = Table.read path
table1 = table.dropNa
table2 = oneHotOrigin table1
table3 = table2.remove "Origin"
table4 = shuffle table3
(trainTable, testTable) = sample table4 0.2
trainLabels' = trainTable.at "MPG"
testLabels' = testTable.at "MPG"
trainFeatures' = trainTable.remove "MPG"
testFeatures' = testTable.remove "MPG"
trainFeatures = Tensors.batchFromList $ dataframeToTensorList [nFeatures] trainFeatures'
testFeatures = Tensors.batchFromList $ dataframeToTensorList [nFeatures] testFeatures'
trainLabels = Tensors.batchFromList $ dataframeToTensorList [1] trainLabels'
testLabels = Tensors.batchFromList $ dataframeToTensorList [1] testLabels'
(trainFeatures, testFeatures, trainLabels, testLabels)
</code></pre><p><img src="Screenshots/prepareData.png" alt></p>
<p>And last but not least, helper function to prepare the optimizing function, used in a learning process.</p>
<pre data-role="codeBlock" data-info class="language-"><code>def prepareOptimizer:
lr = 0.001
rho = 0.9
momentum = 0.0
epsilon = 0.000000001
opt = RMSPropOptimizer.create lr rho momentum epsilon
opt
</code></pre><h2 class="mume-header" id="building-model-training-and-testing">Building model, training and testing</h2>
<p>Let's focus on the details of Luna Tensorflow API.</p>
<table>
<tbody><tr><th> Code </th><th> Node editor </th></tr>
<tr><td>
<pre data-role="codeBlock" data-info class="language-"><code>def main:
(trainFeatures, testFeatures,
trainLabels, testLabels) =
prepareData "auto-mpg.csv"
</code></pre></td><td>
<p>Loading batched datasets, divided into train and test parts.</p>
<p><img src="Screenshots/preparedData.png" alt></p>
</td></tr>
<tr><td>
<pre data-role="codeBlock" data-info class="language-"><code>
input = Input.create
FloatType
[nFeatures]
d1 = Dense.createWithActivation
64
Operations.relu
input
d2 = Dense.createWithActivation
64
Operations.relu
d1
d3 = Dense.createWithActivation
1
Operations.relu
d2
</code></pre></td><td>
<p>Connecting models layers in sequential order:</p>
<ul>
<li> input layer feeded with tensors of [nFeatures] shape, </li>
<li> two fully connected layers with 64 output neurons, </li>
<li> output fully connected layer with 1 neuron. </li>
</ul>
<p><img src="Screenshots/layers.png" alt></p>
</td></tr>
<tr><td>
<pre data-role="codeBlock" data-info class="language-"><code> opt = prepareOptimizer
loss = MeanErrors.meanSquareError
model = Models.make
input
d3
opt
loss
untrainedError = error
model
testFeatures
testLabels
</code></pre></td><td>
<p>Building model with its parameters:</p>
<ul>
<li> input and output layers, </li>
<li> prepared optimizer, </li>
<li> mean square error loss function. </li>
</ul>
<p><img src="Screenshots/model.png" alt></p>
</td></tr>
<tr><td>
<pre data-role="codeBlock" data-info class="language-"><code> epochs = 30
(h, trained) = model.train
[trainFeatures]
[trainLabels]
epochs
(ValidationFraction 0.1)
0
trainedError = error
trained
testFeatures
testLabels
None
</code></pre></td><td>
<p>Training model, and calculating its error on the test dataset, before and after a whole process.<br>
<img src="Screenshots/train.png" alt></p>
</td></tr>
</tbody></table>
<p>Evaluated model lets us observe the error ratio after training process, on the node named <code>trainedError</code>. We can compare it with the error ratio before training, displayed on the node named <code>untrainedError</code>.</p>
<center>
<p><img src="Screenshots/errorDiff.png" alt></p>
</center>
<p>Appearance of all <code>main</code> function nodes.</p>
<p><img src="Screenshots/main.png" alt></p>
</div>
</body></html>