Skip to content

Commit 61ae2b0

Browse files
authored
Merge pull request #10 from LdDl/embedding-layer
implement embedding layer
2 parents 33d0f6d + 82e6dd7 commit 61ae2b0

File tree

4 files changed

+660
-0
lines changed

4 files changed

+660
-0
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# Example of how to use Embedding layers
2+
3+
Let's imagine that we have need to do following task:
4+
5+
Convert the textual assessment of the quality of the work into a numerical grade.
6+
7+
If work is not done (or is done in a bad way) then assessment is 0.0
8+
9+
If work is done (and is done in a good way) then assessment is 1.0
10+
11+
If work is done in a mediocre way then assessment is 0.5
12+
13+
Examples of input data (with corresponding assessment):
14+
```
15+
Well done! - 1.0
16+
Good work - 1.0
17+
Great effort - 1.0
18+
nice work - 1.0
19+
Excellent! - 1.0
20+
Weak - 0.0
21+
Poor effort! - 0.0
22+
not good - 0.0
23+
poor work - 0.0
24+
Could be way better. - 0.0
25+
average :( - 0.5
26+
middle level - 0.5
27+
ordinary stuff - 0.5
28+
boilerplate - 0.5
29+
standart approach - 0.5
30+
```
31+
32+
Restrictions:
33+
* Assume that vocabulary size is 50
34+
* Max amount of words in a text assesment 5
35+
36+
So, neural network structure would be:
37+
* Input shape equals to {**1** x **Max number of words in a sentence**}. Max number of words is defined as "5"
38+
* Output shape equals to {**1** x **1**} since there is only one possible output (0.0, 1.0 or 0.5 in perfect conditions)
39+
* Layers:
40+
* Embedding layer - Let's assume embedding dimensions is 12.
41+
42+
It means that this layer has **Vocabulary size (which is 50)**-tensor of size **embedding dimensions (which is 12)**.
43+
44+
No activation function is required. No bias is required.
45+
* Flatten layer - just represent N-tensor as [**1** x **Total number of elements in tensor**]
46+
* Output layer - just linear layer with sigmoid activation function.
47+
48+
Number of input neurons: [**Max number of words in a sentence** x **Embedding dimensions**]. Number of output neurons: [**1** x **1**]
49+
50+
No bias is required.
51+
* How to represent text as numerical data? Well, [HashingTrick](../../../utils.go#L313) and [PaddingInt64Slice](../../../utils.go#L288) will help to do this task
52+
53+
Final representation of network:
54+
input(1, 5) -> embedding(inputs=5, voc=50, dims=12) -> flatten(5,12) -> linear(inputs=60, outputs=1) -> sigmoid(1)
55+
56+
Assume that number of training epochs is 200, learning rate is 0.01, solver is Adam, batch size is 1
57+
58+
Main code is in [main.go file](main.go). I guess it's pretty straightforward. But if it's not than I appreciate yours PR to improve this document
59+
60+
Simply execute:
61+
```shell
62+
go run main.go
63+
```
64+
65+
Final output on for trainig data (may vary due the nature of rand() calls):
66+
```shell
67+
Epoch 0:
68+
Discriminator's loss: 0.0016569854606968827
69+
Epoch 40:
70+
Discriminator's loss: 0.04548602801653217
71+
Epoch 80:
72+
Discriminator's loss: 0.0034698363241729554
73+
Epoch 120:
74+
Discriminator's loss: 0.007486103427248882
75+
Epoch 160:
76+
Discriminator's loss: 9.23967546782277e-05
77+
Text assessment: Weak
78+
Its hashed value: [5 0 0 0 0]
79+
Its defined numerical assessment: 0.0
80+
Its evaluated numerical assessment: 0.0
81+
Difference between defined and evaluated: 0.0
82+
Text assessment: middle level
83+
Its hashed value: [12 40 0 0 0]
84+
Its defined numerical assessment: 0.5
85+
Its evaluated numerical assessment: 0.5
86+
Difference between defined and evaluated: 0.0
87+
Text assessment: not good
88+
Its hashed value: [31 14 0 0 0]
89+
Its defined numerical assessment: 0.0
90+
Its evaluated numerical assessment: 0.0
91+
Difference between defined and evaluated: 0.0
92+
Text assessment: Good work
93+
Its hashed value: [14 24 0 0 0]
94+
Its defined numerical assessment: 1.0
95+
Its evaluated numerical assessment: 0.9
96+
Difference between defined and evaluated: 0.1
97+
Text assessment: ordinary stuff
98+
Its hashed value: [23 44 0 0 0]
99+
Its defined numerical assessment: 0.5
100+
Its evaluated numerical assessment: 0.5
101+
Difference between defined and evaluated: 0.0
102+
Text assessment: Could be way better.
103+
Its hashed value: [36 25 5 18 0]
104+
Its defined numerical assessment: 0.0
105+
Its evaluated numerical assessment: 0.0
106+
Difference between defined and evaluated: 0.0
107+
Text assessment: average :(
108+
Its hashed value: [35 41 0 0 0]
109+
Its defined numerical assessment: 0.5
110+
Its evaluated numerical assessment: 0.5
111+
Difference between defined and evaluated: 0.0
112+
Text assessment: Great effort
113+
Its hashed value: [26 11 0 0 0]
114+
Its defined numerical assessment: 1.0
115+
Its evaluated numerical assessment: 0.9
116+
Difference between defined and evaluated: 0.1
117+
Text assessment: poor work
118+
Its hashed value: [28 24 0 0 0]
119+
Its defined numerical assessment: 0.0
120+
Its evaluated numerical assessment: 0.1
121+
Difference between defined and evaluated: 0.1
122+
Text assessment: boilerplate
123+
Its hashed value: [36 0 0 0 0]
124+
Its defined numerical assessment: 0.5
125+
Its evaluated numerical assessment: 0.5
126+
Difference between defined and evaluated: 0.0
127+
Text assessment: standart approach
128+
Its hashed value: [13 29 0 0 0]
129+
Its defined numerical assessment: 0.5
130+
Its evaluated numerical assessment: 0.5
131+
Difference between defined and evaluated: 0.0
132+
Text assessment: Poor effort!
133+
Its hashed value: [28 11 0 0 0]
134+
Its defined numerical assessment: 0.0
135+
Its evaluated numerical assessment: 0.0
136+
Difference between defined and evaluated: 0.0
137+
Text assessment: Excellent!
138+
Its hashed value: [26 0 0 0 0]
139+
Its defined numerical assessment: 1.0
140+
Its evaluated numerical assessment: 1.0
141+
Difference between defined and evaluated: 0.0
142+
Text assessment: nice work
143+
Its hashed value: [34 24 0 0 0]
144+
Its defined numerical assessment: 1.0
145+
Its evaluated numerical assessment: 0.9
146+
Difference between defined and evaluated: 0.1
147+
Text assessment: Well done!
148+
Its hashed value: [26 13 0 0 0]
149+
Its defined numerical assessment: 1.0
150+
Its evaluated numerical assessment: 1.0
151+
Difference between defined and evaluated: 0.0
152+
```

0 commit comments

Comments
 (0)