t_learn 0.1.1.2 → 0.1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -5
- data/lib/t_learn/feedforward_neural_network.rb +22 -7
- data/lib/t_learn/k_means.rb +71 -0
- data/lib/t_learn/version.rb +1 -1
- metadata +3 -3
- data/.rake_tasks~ +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4997f379b3ef4527598a83ceb94ab6620d61b886
|
4
|
+
data.tar.gz: cca4c6643f596a70d69b1a79a86ca94189bcce0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1951ea181fb690965373c0444af8c3d3682b2bdf17889baf7a4aa6d84f57701a5a4211916a1034f83aef801b6101ba64a1da1a5c2f43fa67f3b605dc8c807dd7
|
7
|
+
data.tar.gz: fc1ddcaa6a905309de2e8729fd96f44c11ac04dc8c652287d8c5e805957af42af3206c627276767557b4e1f6ddd1889ae4568834fcb0023d87743942033cbbd4
|
data/README.md
CHANGED
@@ -25,15 +25,17 @@ respect for keras.
|
|
25
25
|
|
26
26
|
``` ruby
|
27
27
|
|
28
|
-
|
28
|
+
require "t_learn"
|
29
|
+
|
30
|
+
model = TLearn::FeedForwardNeuralNetwork.new(learning_rate=0.1)
|
29
31
|
|
30
|
-
model.add_layer(2)
|
31
|
-
model.add_layer(3)
|
32
|
-
model.add_layer(1)
|
32
|
+
model.add_layer(node_num=2)
|
33
|
+
model.add_layer(node_num=3)
|
34
|
+
model.add_layer(node_num=1)
|
33
35
|
|
34
36
|
x_train = [[0.0, 0.0],[0.0, 1.0], [1.0, 0.0], [1.0, 1.0]]
|
35
37
|
y_train = [[ 0.0 ], [ 1.0 ],[ 1.0 ],[ 0.0 ]]
|
36
|
-
model.fit(x_train, y_train, 50000)
|
38
|
+
model.fit(x_train, y_train, epoch=50000)
|
37
39
|
|
38
40
|
x_test = x_train
|
39
41
|
y_test = y_train
|
@@ -42,6 +44,10 @@ err_rate = model.evaluate(x_test, y_test)
|
|
42
44
|
|
43
45
|
puts "err rate: #{err_rate}%"
|
44
46
|
|
47
|
+
# p x_test[0]
|
48
|
+
# model.propagation(x_text[0])
|
49
|
+
# puts model.get_output_layer[1].w
|
50
|
+
|
45
51
|
```
|
46
52
|
|
47
53
|
### result
|
@@ -2,18 +2,19 @@
|
|
2
2
|
# -*- encoding: utf-8 -*-
|
3
3
|
|
4
4
|
module TLearn
|
5
|
-
|
6
5
|
#
|
7
6
|
# ==
|
8
7
|
#
|
9
8
|
class FeedForwardNeuralNetwork
|
10
9
|
attr_accessor :layer_list, :layer_size, :link_list, :node_id, :learning_rate, :err_list, :threshold
|
11
|
-
def initialize(learning_rate=0.1, threshold=0.0)
|
10
|
+
def initialize(learning_rate=0.1, threshold=0.0, momentum_rate=0.01)
|
12
11
|
@layer_size = 0 #layer iterator
|
13
12
|
@layer_list = Array.new
|
14
13
|
@link_list = Hash.new
|
15
14
|
@node_id = 0
|
16
15
|
@learning_rate = learning_rate
|
16
|
+
@momentum_weight_list = Hash.new
|
17
|
+
@momentum_rate = momentum_rate
|
17
18
|
@err_list = Array.new
|
18
19
|
@threshold = threshold
|
19
20
|
end
|
@@ -43,6 +44,7 @@ module TLearn
|
|
43
44
|
@layer_list[@layer_size - 1].each do |from_node|
|
44
45
|
@layer_list[@layer_size].each do |to_node|
|
45
46
|
@link_list["#{from_node.id}_#{to_node.id}"] = rand(-1.0...1.0)
|
47
|
+
@momentum_weight_list["#{from_node.id}_#{to_node.id}"] = 0.0
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
@@ -69,6 +71,7 @@ module TLearn
|
|
69
71
|
end
|
70
72
|
|
71
73
|
def propagation(x)
|
74
|
+
raise "input size is different from node num of input layer " if @layer_list[0].size != x.size
|
72
75
|
# input data
|
73
76
|
@layer_list[0].each_with_index do |node, i|
|
74
77
|
node.input (x[i])
|
@@ -85,6 +88,8 @@ module TLearn
|
|
85
88
|
end
|
86
89
|
end
|
87
90
|
end
|
91
|
+
|
92
|
+
return get_output_layer
|
88
93
|
end
|
89
94
|
|
90
95
|
def calc_ave_err(y)
|
@@ -96,25 +101,31 @@ module TLearn
|
|
96
101
|
return ave_err
|
97
102
|
end
|
98
103
|
|
99
|
-
|
104
|
+
|
100
105
|
#
|
101
106
|
# ===
|
102
107
|
#
|
103
108
|
# @param y Array teacher_data
|
104
109
|
#
|
105
110
|
def back_propagation(y)
|
111
|
+
|
112
|
+
raise "output size different from node num of output layer" if get_output_layer.size != y.size
|
113
|
+
# raise "o" if get_output_layer.size != y.size
|
106
114
|
delta = {}
|
107
115
|
( @layer_size - 1).downto(0) do |layer_num|
|
108
116
|
if ( @layer_size - 1) == layer_num # if output layer
|
109
117
|
@layer_list[layer_num].each_with_index do |output_node, i|
|
110
|
-
|
118
|
+
delta["#{output_node.id}"] = -1.0 * calc_err(y[i], output_node.w) * output_node.w * (1.0 -output_node.w)
|
111
119
|
end
|
112
120
|
else
|
113
121
|
@layer_list[layer_num].each do |from_node|
|
114
122
|
# リンクの更新
|
115
123
|
@layer_list[layer_num + 1].each do |to_node|
|
124
|
+
# モメンタムによる更新
|
125
|
+
momentum_weight = @momentum_rate * @momentum_weight_list["#{from_node.id}_#{to_node.id}"]
|
116
126
|
update_weight = -1.0 * @learning_rate * delta["#{to_node.id}"] * from_node.w
|
117
|
-
@link_list["#{from_node.id}_#{to_node.id}"] = @link_list["#{from_node.id}_#{to_node.id}"] + update_weight
|
127
|
+
@link_list["#{from_node.id}_#{to_node.id}"] = @link_list["#{from_node.id}_#{to_node.id}"] + update_weight + momentum_weight
|
128
|
+
@momentum_weight_list["#{from_node.id}_#{to_node.id}"] = update_weight # for momentum
|
118
129
|
end
|
119
130
|
# その層のdeltaの更新
|
120
131
|
delta["#{from_node.id}"] = calc_delta(delta,layer_num, from_node) * from_node.w * (1.0 - from_node.w)
|
@@ -147,14 +158,18 @@ module TLearn
|
|
147
158
|
err += (y_f - o.w).abs
|
148
159
|
end
|
149
160
|
sum_err += (err/y_test[0].size)
|
150
|
-
puts "x #{x}, y #{y} , output #{output}"
|
161
|
+
# puts "x #{x}, y #{y} , output #{output}"
|
151
162
|
end
|
152
163
|
return (sum_err/y_test.size) * 100.0
|
153
164
|
# return 0.0
|
154
165
|
end
|
155
166
|
|
156
167
|
def get_output_layer
|
157
|
-
|
168
|
+
output = []
|
169
|
+
@layer_list[@layer_size-1].each do |node|
|
170
|
+
output.push(node.w)
|
171
|
+
end
|
172
|
+
return output
|
158
173
|
end
|
159
174
|
|
160
175
|
class Node
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
4
|
+
require "yaml"
|
5
|
+
|
6
|
+
module TLearn
|
7
|
+
class K_Means
|
8
|
+
attr_accessor
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# === make datas for test
|
15
|
+
#
|
16
|
+
def make_data
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
def calc_burden_ratio(k)
|
27
|
+
end
|
28
|
+
|
29
|
+
def log_likelihood
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_mu(k, burden_ratio)
|
34
|
+
end
|
35
|
+
|
36
|
+
def update_var(k, burden_ratio)
|
37
|
+
end
|
38
|
+
|
39
|
+
def update_pi(k)
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# === 混合正規分布を生成する
|
44
|
+
#
|
45
|
+
def gaussian_mix()
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
#
|
50
|
+
# === gauusian distribution
|
51
|
+
#
|
52
|
+
def gauusian(x, mu, sigma)
|
53
|
+
f1 = (1.0/Math.sqrt(2.0*Math::PI))
|
54
|
+
f2 = Math.exp(-((x-mu)^2 / 2*sigma^2))
|
55
|
+
return f1 * f2
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# ===ボックス―ミューラー法をよる正規分布乱数発生
|
60
|
+
# @param mu flout 平均
|
61
|
+
# @param sigma flout 標準偏差
|
62
|
+
# @return ボックスミューラー法に従う正規分布に従う乱数を生成
|
63
|
+
#
|
64
|
+
def normal_rand(mu = 0,sigma = 1.0)
|
65
|
+
a, b = rand(), rand() ;
|
66
|
+
return (Math.sqrt(-2*Math.log(rand()))*Math.sin(2*Math::PI*rand()) * sigma) + mu
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
data/lib/t_learn/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: t_learn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.1.
|
4
|
+
version: 0.1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tcom242242
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,7 +60,6 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
-
- ".rake_tasks~"
|
64
63
|
- ".rspec"
|
65
64
|
- ".travis.yml"
|
66
65
|
- CODE_OF_CONDUCT.md
|
@@ -74,6 +73,7 @@ files:
|
|
74
73
|
- lib/t_learn/em.rb
|
75
74
|
- lib/t_learn/feedforward_neural_network.rb
|
76
75
|
- lib/t_learn/hop_field_net.rb
|
76
|
+
- lib/t_learn/k_means.rb
|
77
77
|
- lib/t_learn/version.rb
|
78
78
|
- t_learn.gemspec
|
79
79
|
homepage: https://github.com/Tcom242242/t_learn
|