ruby-dnn 0.6.6 → 0.6.7

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
  SHA256:
3
- metadata.gz: fd29475dde45d895faa78adb3d12f9a0aa912a21aac2afa7162805034ab4f7fc
4
- data.tar.gz: 42fe11e0925f32998f2c41d53551244b6d94168a71f86c7cd720cab30cf34f57
3
+ metadata.gz: 5aeb8ad44e4e4bd11c91c64f2a019234f0f0c346c1efca4d7a0439674aeec9c1
4
+ data.tar.gz: 197d78045cebfc7e3b4eb3d24e7fce633a6b9e2d6fbe7de2611fc893ea24ac61
5
5
  SHA512:
6
- metadata.gz: 1675da8efd00501705f3b45d7dedf66de6a6c5e52660c3a5a3f4487fd93c9fc50ab4951fe436e4e8988ead134dffd59d03d82ebfc7d96b301e259eb63024fdb5
7
- data.tar.gz: 75690da41a5d79d1c15474832fc36785b8d94eb759d752767a4cf1f840293cef19ef4f525c66cbcf829742f71f0b513fba2756503a669aaf0cb5e3e280270471
6
+ metadata.gz: a76966c0a8872049b181ab762cd3c3cd8ab1ab4cc804bf5fe9c6c4fe34c346f01c7b8d340d2a509674eda96804993b9291136f5fda902691cc6b18d0b008b575
7
+ data.tar.gz: '08370ee3035f15947a527255336de5671c0ebe03a76d2e458c692ed149e2318a6475d714c078dabc8ea28d20d8411b651150598c72cbe81e8aa48b01a7469a9a'
data/API-Reference.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
  ruby-dnnのAPIリファレンスです。このリファレンスでは、APIを利用するうえで必要となるクラスとメソッドしか記載していません。
3
3
  そのため、プログラムの詳細が必要な場合は、ソースコードを参照してください。
4
4
 
5
- 最終更新バージョン:0.6.4
5
+ 最終更新バージョン:0.6.7
6
6
 
7
7
  # module DNN
8
8
  ruby-dnnの名前空間をなすモジュールです。
@@ -23,8 +23,6 @@ ruby-dnnのバージョン。
23
23
  ## attr_accessor :trainable
24
24
  falseを設定すると、パラメータの学習を禁止します。
25
25
 
26
- ## attr_reader :optimize
27
- モデルのオプティマイザーを取得します。
28
26
 
29
27
  ## 【Singleton methods】
30
28
 
@@ -85,14 +83,23 @@ String
85
83
  学習パラメータを変換して生成したjson文字列。
86
84
 
87
85
  ## def <<(layer)
88
- モデルにレイヤーを追加します。
86
+ モデルにレイヤーまたはモデルを追加します。
89
87
  ### arguments
90
- * Layer layer
91
- 追加するレイヤー。
88
+ * Layer | Model layer
89
+ 追加するレイヤーまたはモデル。
92
90
  ### return
93
91
  Model
94
92
  自身のモデルのインスタンス。
95
93
 
94
+ ## def optimizer
95
+ モデルのオプティマイザーを取得します。
96
+ モデルにオプティマイザーが存在しない場合は、上位のモデルのオプティマイザーを取得します。
97
+ ### arguments
98
+ なし。
99
+ ### return
100
+ Optimizer
101
+ モデルのオプティマイザー。
102
+
96
103
  ## def compile(optimizer)
97
104
  モデルをコンパイルします。
98
105
  ### arguments
@@ -116,7 +123,7 @@ bool
116
123
  トレーニング用入力データ。
117
124
  * Numo::SFloat y
118
125
  トレーニング用出力データ。
119
- * epochs
126
+ * Integer epochs
120
127
  学習回数。
121
128
  * Integer batch_size: 1
122
129
  学習に使用するミニバッチの数。
@@ -233,7 +240,7 @@ Array
233
240
  レイヤーの形状。Layerクラスのshapeメソッドでは、前レイヤーの形状を返却します。
234
241
 
235
242
  ## abstruct def to_hash
236
- レイヤーをハッシュに変換します。このメソッドは、モデルをjsonに変換するために使用されます。このメソッドが返すハッシュの要素には、{name: self.class.name}が含まれていなければなりません。
243
+ レイヤーをハッシュに変換します。このメソッドは、モデルをjsonに変換するために使用されます。このメソッドが返すハッシュの要素には、{name: `self.class.name`}が含まれていなければなりません。
237
244
  ### arguments
238
245
  なし。
239
246
  ### return
@@ -248,6 +255,7 @@ Hash
248
255
 
249
256
  ## private abstruct def init_params
250
257
  更新可能なパラメータを初期化します。HasParamLayerクラスを継承するクラスは、このメソッドを実装する必要があります。
258
+ このメソッドは、レイヤーが初回ビルドされたときのみ実行されます。
251
259
  ### arguments
252
260
  なし。
253
261
  ### return
@@ -9,8 +9,8 @@ module DNN
9
9
 
10
10
  # Build the layer.
11
11
  def build(model)
12
- @built = true
13
12
  @model = model
13
+ @built = true
14
14
  end
15
15
 
16
16
  # Does the layer have already been built?
@@ -38,7 +38,7 @@ module DNN
38
38
 
39
39
  # Get the previous layer.
40
40
  def prev_layer
41
- @model.layers[@model.layers.index(self) - 1]
41
+ @model.get_prev_layer(self)
42
42
  end
43
43
  end
44
44
 
@@ -57,8 +57,11 @@ module DNN
57
57
  end
58
58
 
59
59
  def build(model)
60
- super
61
- init_params
60
+ @model = model
61
+ unless @built
62
+ @built = true
63
+ init_params
64
+ end
62
65
  end
63
66
 
64
67
  # Update the parameters.
@@ -5,7 +5,6 @@ module DNN
5
5
  class Model
6
6
  attr_accessor :layers # All layers possessed by the model
7
7
  attr_accessor :trainable # Setting false prevents learning of parameters.
8
- attr_reader :optimizer # Optimizer possessed by the model
9
8
 
10
9
  def self.load(file_name)
11
10
  Marshal.load(File.binread(file_name))
@@ -66,8 +65,8 @@ module DNN
66
65
  end
67
66
 
68
67
  def <<(layer)
69
- unless layer.is_a?(Layers::Layer)
70
- raise TypeError.new("layer is not an instance of the DNN::Layers::Layer class.")
68
+ if !layer.is_a?(Layers::Layer) && !layer.is_a?(Model)
69
+ raise TypeError.new("layer is not an instance of the DNN::Layers::Layer class or DNN::Model class.")
71
70
  end
72
71
  @layers << layer
73
72
  self
@@ -80,10 +79,19 @@ module DNN
80
79
  @compiled = true
81
80
  layers_check
82
81
  @optimizer = optimizer
82
+ build
83
+ layers_shape_check
84
+ end
85
+
86
+ def build(super_model = nil)
87
+ @super_model = super_model
83
88
  @layers.each do |layer|
84
89
  layer.build(self)
85
90
  end
86
- layers_shape_check
91
+ end
92
+
93
+ def optimizer
94
+ @optimizer ? @optimizer : @super_model.optimizer
87
95
  end
88
96
 
89
97
  def compiled?
@@ -140,10 +148,10 @@ module DNN
140
148
  def train_on_batch(x, y, &batch_proc)
141
149
  x, y = batch_proc.call(x, y) if batch_proc
142
150
  forward(x, true)
143
- loss = @layers[-1].loss(y)
151
+ loss_value = loss(y)
144
152
  backward(y)
145
- @layers.each { |layer| layer.update if @trainable && layer.is_a?(HasParamLayer) }
146
- loss
153
+ update
154
+ loss_value
147
155
  end
148
156
 
149
157
  def accurate(x, y, batch_size = 1, &batch_proc)
@@ -178,26 +186,55 @@ module DNN
178
186
  def predict1(x)
179
187
  predict(Xumo::SFloat.cast([x]))[0, false]
180
188
  end
189
+
190
+ def copy
191
+ Marshal.load(Marshal.dump(self))
192
+ end
181
193
 
182
194
  def forward(x, training)
183
- unless compiled?
184
- raise DNN_Error.new("The model is not compiled.")
185
- end
186
195
  @training = training
187
196
  @layers.each do |layer|
188
- x = layer.forward(x)
197
+ x = if layer.is_a?(Layers::Layer)
198
+ layer.forward(x)
199
+ elsif layer.is_a?(Model)
200
+ layer.forward(x, training)
201
+ end
189
202
  end
190
203
  x
191
204
  end
205
+
206
+ def loss(y)
207
+ @layers[-1].loss(y)
208
+ end
192
209
 
193
210
  def backward(y)
194
211
  dout = y
195
- @layers[0..-1].reverse.each do |layer|
212
+ @layers.reverse.each do |layer|
196
213
  dout = layer.backward(dout)
197
214
  end
198
215
  dout
199
216
  end
200
217
 
218
+ def update
219
+ @layers.each do |layer|
220
+ layer.update if @trainable && (layer.is_a?(Layers::HasParamLayer) || layer.is_a?(Model))
221
+ end
222
+ end
223
+
224
+ def get_prev_layer(layer)
225
+ layer_index = @layers.index(layer)
226
+ prev_layer = if layer_index == 0
227
+ @super_model.layers[@super_model.layers.index(self) - 1]
228
+ else
229
+ @layers[layer_index - 1]
230
+ end
231
+ if prev_layer.is_a?(Layers::Layer)
232
+ prev_layer
233
+ elsif prev_layer.is_a?(Model)
234
+ prev_layer.layers[-1]
235
+ end
236
+ end
237
+
201
238
  private
202
239
 
203
240
  def layers_check
data/lib/dnn/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DNN
2
- VERSION = "0.6.6"
2
+ VERSION = "0.6.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-dnn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.6
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - unagiootoro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-22 00:00:00.000000000 Z
11
+ date: 2018-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray