ruby-dnn 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4644c4f76c548fe20e899150fbbed0d445334afa428c8119458d4c90e0bf6afc
4
- data.tar.gz: c0ea6b81a390bc06925695663d01f0b235a4e6915a4d4c4e901f22c51217d43a
3
+ metadata.gz: '09358674bd9463c57f3329fe29fc3597e76c7f691bde08097069ca3c82b4c6e9'
4
+ data.tar.gz: cd26c50e67a70f339d26df1a131a88c46dc77658d32994d92e908472ccea9140
5
5
  SHA512:
6
- metadata.gz: 282164d11e647a23b86a775cb563a746995cbf4dcc66e10e10ce50706c14ae91e6c6e5579e8ace064554a57e749d1ebc5f617091316e9cd11e05fdc3667e2851
7
- data.tar.gz: 2fdd20a6bd776c84ce2bd6d5a49c12003ae20c64218db3b1ba504106d34d08caa55ece05253b32140dd79e2d89f68e33d12348e6c3c2efede7a1d1e1b2ce17c2
6
+ metadata.gz: bd189bd96810220d873a3e2ce14c0124147d2e3dd9291914984ecaa5d14b7b7e50f222372958c22739af83590d26defc38071e6c4a90570b987f46c77ad62e07
7
+ data.tar.gz: 5571c28f7ee17c4464b5a901f0e20aa0526894fa51364f8e0f0c6fc398ce9c0b6a3ba03385877afa924e59a7e82c0a511ce1f528f955162c93756196cc40c858
@@ -2,7 +2,7 @@
2
2
  ruby-dnnのAPIリファレンスです。このリファレンスでは、APIを利用するうえで必要となるクラスとメソッドしか記載していません。
3
3
  そのため、プログラムの詳細が必要な場合は、ソースコードを参照してください。
4
4
 
5
- 最終更新バージョン:0.5.0
5
+ 最終更新バージョン:0.5.1
6
6
 
7
7
  # module DNN
8
8
  ruby-dnnの名前空間をなすモジュールです。
@@ -153,6 +153,17 @@ Float
153
153
 
154
154
  ## def predict(x)
155
155
  モデルを使用して、結果の推論を行います。
156
+ 入力データは、バッチデータである必要があります。
157
+ ### arguments
158
+ * SFloat x
159
+ 推論用入力データ。
160
+ ### return
161
+ SFloat
162
+ 推論結果を返します。
163
+
164
+ ## def predict1(x)
165
+ モデルを使用して、結果の推論を行います。
166
+ predictとは異なり、一つの入力データに対して、一つの出力データを返します。
156
167
  ### arguments
157
168
  * SFloat x
158
169
  推論用入力データ。
@@ -489,6 +500,10 @@ Float alpha
489
500
  恒等関数と二乗誤差関数を合わせた出力層のレイヤーです。
490
501
 
491
502
 
503
+ # class IdentityMAE < OutputLayer
504
+ 恒等関数と平均絶対誤差関数を合わせた出力層のレイヤーです。
505
+
506
+
492
507
  # class SoftmaxWithLoss < OutputLayer
493
508
  ソフトマックス関数とクロスエントロピー誤差関数を合わせた出力層のレイヤーです。
494
509
 
data/Rakefile CHANGED
@@ -4,15 +4,15 @@ require "rake/testtask"
4
4
  Rake::TestTask.new(:test) do |t|
5
5
  t.libs << "test"
6
6
  t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
7
+ t.test_files = FileList["test/*_test.rb"]
8
8
  end
9
9
 
10
10
  task :build_dataset_loader do
11
- sh "cd lib/dnn/ext/dataset_loader; ruby extconf.rb; make"
11
+ sh "cd lib/dnn/ext/cifar10_loader; ruby extconf.rb; make"
12
12
  end
13
13
 
14
14
  task :build_image_io do
15
- sh "cd lib/dnn/ext/image_io; ruby extconf.rb; make"
15
+ sh "cd lib/dnn/ext/rb_stb_image; ruby extconf.rb; make"
16
16
  end
17
17
 
18
18
  task :default => [:test, :build_dataset_loader, :build_image_io]
@@ -89,6 +89,25 @@ module DNN
89
89
  0.5 * ((@out - y)**2).sum / batch_size + ridge
90
90
  end
91
91
  end
92
+
93
+
94
+ class IdentityMAE < OutputLayer
95
+ def forward(x)
96
+ @out = x
97
+ end
98
+
99
+ def backward(y)
100
+ dout = @out - y
101
+ dout[dout >= 0] = 1
102
+ dout[dout < 0] = -1
103
+ dout
104
+ end
105
+
106
+ def loss(y)
107
+ batch_size = y.shape[0]
108
+ (@out - y).abs.sum / batch_size + ridge
109
+ end
110
+ end
92
111
 
93
112
 
94
113
  class SoftmaxWithLoss < OutputLayer
@@ -90,45 +90,6 @@ module DNN
90
90
  def training?
91
91
  @training
92
92
  end
93
-
94
- def train(x, y, epochs,
95
- batch_size: 1,
96
- test: nil,
97
- verbose: true,
98
- batch_proc: nil,
99
- &epoch_proc)
100
- @batch_size = batch_size
101
- num_train_data = x.shape[0]
102
- (1..epochs).each do |epoch|
103
- puts "【 epoch #{epoch}/#{epochs} 】" if verbose
104
- (num_train_data.to_f / @batch_size).ceil.times do |index|
105
- x_batch, y_batch = Util.get_minibatch(x, y, @batch_size)
106
- loss = train_on_batch(x_batch, y_batch, @batch_size, &batch_proc)
107
- if loss.nan?
108
- puts "\nloss is nan" if verbose
109
- return
110
- end
111
- num_trained_data = (index + 1) * batch_size
112
- num_trained_data = num_trained_data > num_train_data ? num_train_data : num_trained_data
113
- log = "\r"
114
- 20.times do |i|
115
- if i < num_trained_data * 20 / num_train_data
116
- log << "■"
117
- else
118
- log << "・"
119
- end
120
- end
121
- log << " #{num_trained_data}/#{num_train_data} loss: #{loss}"
122
- print log if verbose
123
- end
124
- if verbose && test
125
- acc = accurate(test[0], test[1], batch_size,&batch_proc)
126
- print " accurate: #{acc}"
127
- end
128
- puts "" if verbose
129
- epoch_proc.call(epoch) if epoch_proc
130
- end
131
- end
132
93
 
133
94
  def train(x, y, epochs,
134
95
  batch_size: 1,
@@ -175,9 +136,10 @@ module DNN
175
136
  @batch_size = batch_size
176
137
  x, y = batch_proc.call(x, y) if batch_proc
177
138
  forward(x, true)
139
+ loss = @layers[-1].loss(y)
178
140
  backward(y)
179
141
  @layers.each { |layer| layer.update if layer.respond_to?(:update) }
180
- @layers[-1].loss(y)
142
+ loss
181
143
  end
182
144
 
183
145
  def accurate(x, y, batch_size = nil, &batch_proc)
@@ -210,6 +172,10 @@ module DNN
210
172
  def predict(x)
211
173
  forward(x, false)
212
174
  end
175
+
176
+ def predict1(x)
177
+ predict(SFloat.cast([x]))[0, false]
178
+ end
213
179
 
214
180
  def forward(x, training)
215
181
  @training = training
@@ -1,3 +1,3 @@
1
1
  module DNN
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
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.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - unagiootoro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-29 00:00:00.000000000 Z
11
+ date: 2018-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray