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 +4 -4
- data/API-Reference.ja.md +16 -8
- data/lib/dnn/core/layers.rb +7 -4
- data/lib/dnn/core/model.rb +49 -12
- data/lib/dnn/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aeb8ad44e4e4bd11c91c64f2a019234f0f0c346c1efca4d7a0439674aeec9c1
|
4
|
+
data.tar.gz: 197d78045cebfc7e3b4eb3d24e7fce633a6b9e2d6fbe7de2611fc893ea24ac61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
data/lib/dnn/core/layers.rb
CHANGED
@@ -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.
|
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
|
-
|
61
|
-
|
60
|
+
@model = model
|
61
|
+
unless @built
|
62
|
+
@built = true
|
63
|
+
init_params
|
64
|
+
end
|
62
65
|
end
|
63
66
|
|
64
67
|
# Update the parameters.
|
data/lib/dnn/core/model.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
151
|
+
loss_value = loss(y)
|
144
152
|
backward(y)
|
145
|
-
|
146
|
-
|
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.
|
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
|
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
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.
|
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-
|
11
|
+
date: 2018-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: numo-narray
|