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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bcf9731528ca98ed43cfe5f2a7686707def2e6a9
4
- data.tar.gz: a90853e05203740a90c3c5ce6cf9fb13f0ab36bf
3
+ metadata.gz: 4997f379b3ef4527598a83ceb94ab6620d61b886
4
+ data.tar.gz: cca4c6643f596a70d69b1a79a86ca94189bcce0d
5
5
  SHA512:
6
- metadata.gz: 7b25db6487317f85009cb795bec1060e71cdca91804ce74f013e8933d3dfc6f1128c65d02829cac5956b31747cc159907f92fecdb7a910ef18219c95759aa8a5
7
- data.tar.gz: 86dfa12d25b29010c0e6ccebbb120e2f28062e70bdece7e43d830e79d503038fd808553218f0a8d621f11f800be22cd2e30b8e940c5c752b7ba28e008e60a403
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
- model = TLearn::FeedForwardNeuralNetwork.new
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
- delta["#{output_node.id}"] = -1.0 * calc_err(y[i], output_node.w) * output_node.w * (1.0 -output_node.w)
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
- return @layer_list[@layer_size-1]
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
@@ -1,3 +1,3 @@
1
1
  module TLearn
2
- VERSION = "0.1.1.2"
2
+ VERSION = "0.1.1.3"
3
3
  end
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.2
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-01-01 00:00:00.000000000 Z
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
@@ -1,7 +0,0 @@
1
- build
2
- clean
3
- clobber
4
- install
5
- install:local
6
- release[remote]
7
- spec