ruby-dnn 0.8.6 → 0.8.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 +2 -2
- data/examples/cifar10_example.rb +2 -2
- data/examples/mnist_conv2d_example.rb +2 -2
- data/examples/mnist_example.rb +2 -2
- data/examples/mnist_lstm_example.rb +2 -2
- data/lib/dnn.rb +1 -1
- data/lib/dnn/core/layers.rb +10 -12
- data/lib/dnn/core/model.rb +3 -4
- data/lib/dnn/core/optimizers.rb +6 -6
- data/lib/dnn/core/param.rb +9 -0
- data/lib/dnn/core/rnn_layers.rb +1 -1
- data/lib/dnn/lib/cifar10.rb +7 -15
- data/lib/dnn/lib/downloader.rb +46 -0
- data/lib/dnn/lib/mnist.rb +5 -17
- data/lib/dnn/version.rb +1 -1
- metadata +4 -3
- data/lib/dnn/core/learning_param.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '081852bef9d80484e000f4c67e2be9d7b7b5e4c4c72500800ab80ba6a56322e7'
|
4
|
+
data.tar.gz: 8365b770fabd3a021ea7472058569be62fa9ef7d4f459a2220a614b2e213c8ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3ee7b5203c8cb70e4cbd375d6c53f4a61e54d73aafc77582acc61fd2dd11b8a54642264ef70eaf4f02385b53d62303c0c0ca56de68ddfc2f80a39ca343953d8
|
7
|
+
data.tar.gz: d26ef9bf7040e200fd9ed3673fab1538432f1174669cbbe944a8c6566736a5ea7f8a355d0a0672e3b1f51a6e0e1cdf94f8df5b836a2b2b2ce7370160c7a6066d
|
data/API-Reference.ja.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
ruby-dnnのAPIリファレンスです。このリファレンスでは、APIを利用するうえで必要となるクラスとメソッドしか記載していません。
|
3
3
|
そのため、プログラムの詳細が必要な場合は、ソースコードを参照してください。
|
4
4
|
|
5
|
-
最終更新バージョン:0.8.
|
5
|
+
最終更新バージョン:0.8.7
|
6
6
|
|
7
7
|
# module DNN
|
8
8
|
ruby-dnnの名前空間をなすモジュールです。
|
@@ -698,7 +698,7 @@ Float alpha
|
|
698
698
|
### arguments
|
699
699
|
* HasParamLayer layer
|
700
700
|
更新対象のパラメータを持つレイヤーを指定します。
|
701
|
-
*
|
701
|
+
* Param param
|
702
702
|
更新するパラメータです。
|
703
703
|
|
704
704
|
|
data/examples/cifar10_example.rb
CHANGED
@@ -17,8 +17,8 @@ x_test = Numo::SFloat.cast(x_test)
|
|
17
17
|
x_train /= 255
|
18
18
|
x_test /= 255
|
19
19
|
|
20
|
-
y_train = DNN::Util.to_categorical(y_train, 10)
|
21
|
-
y_test = DNN::Util.to_categorical(y_test, 10)
|
20
|
+
y_train = DNN::Util.to_categorical(y_train, 10, Numo::SFloat)
|
21
|
+
y_test = DNN::Util.to_categorical(y_test, 10, Numo::SFloat)
|
22
22
|
|
23
23
|
model = Model.new
|
24
24
|
|
@@ -17,8 +17,8 @@ x_test = Numo::SFloat.cast(x_test).reshape(x_test.shape[0], 28, 28, 1)
|
|
17
17
|
x_train /= 255
|
18
18
|
x_test /= 255
|
19
19
|
|
20
|
-
y_train = DNN::Util.to_categorical(y_train, 10)
|
21
|
-
y_test = DNN::Util.to_categorical(y_test, 10)
|
20
|
+
y_train = DNN::Util.to_categorical(y_train, 10, Numo::SFloat)
|
21
|
+
y_test = DNN::Util.to_categorical(y_test, 10, Numo::SFloat)
|
22
22
|
|
23
23
|
model = Model.new
|
24
24
|
|
data/examples/mnist_example.rb
CHANGED
@@ -17,8 +17,8 @@ x_test = Numo::SFloat.cast(x_test).reshape(x_test.shape[0], 784)
|
|
17
17
|
x_train /= 255
|
18
18
|
x_test /= 255
|
19
19
|
|
20
|
-
y_train = DNN::Util.to_categorical(y_train, 10)
|
21
|
-
y_test = DNN::Util.to_categorical(y_test, 10)
|
20
|
+
y_train = DNN::Util.to_categorical(y_train, 10, Numo::SFloat)
|
21
|
+
y_test = DNN::Util.to_categorical(y_test, 10, Numo::SFloat)
|
22
22
|
|
23
23
|
model = Model.new
|
24
24
|
|
@@ -17,8 +17,8 @@ x_test = Numo::SFloat.cast(x_test).reshape(x_test.shape[0], 28, 28)
|
|
17
17
|
x_train /= 255
|
18
18
|
x_test /= 255
|
19
19
|
|
20
|
-
y_train = DNN::Util.to_categorical(y_train, 10)
|
21
|
-
y_test = DNN::Util.to_categorical(y_test, 10)
|
20
|
+
y_train = DNN::Util.to_categorical(y_train, 10, Numo::SFloat)
|
21
|
+
y_test = DNN::Util.to_categorical(y_test, 10, Numo::SFloat)
|
22
22
|
|
23
23
|
model = Model.new
|
24
24
|
|
data/lib/dnn.rb
CHANGED
@@ -12,7 +12,7 @@ module DNN; end
|
|
12
12
|
require_relative "dnn/version"
|
13
13
|
require_relative "dnn/core/error"
|
14
14
|
require_relative "dnn/core/model"
|
15
|
-
require_relative "dnn/core/
|
15
|
+
require_relative "dnn/core/param"
|
16
16
|
require_relative "dnn/core/initializers"
|
17
17
|
require_relative "dnn/core/layers"
|
18
18
|
require_relative "dnn/core/activations"
|
data/lib/dnn/core/layers.rb
CHANGED
@@ -123,8 +123,8 @@ module DNN
|
|
123
123
|
@bias_initializer = bias_initializer
|
124
124
|
@l1_lambda = l1_lambda
|
125
125
|
@l2_lambda = l2_lambda
|
126
|
-
@params[:weight] = @weight =
|
127
|
-
@params[:bias] = @bias =
|
126
|
+
@params[:weight] = @weight = Param.new
|
127
|
+
@params[:bias] = @bias = Param.new
|
128
128
|
end
|
129
129
|
|
130
130
|
def lasso
|
@@ -349,11 +349,11 @@ module DNN
|
|
349
349
|
@std = Xumo::NMath.sqrt(var + 1e-7)
|
350
350
|
xn = @xc / @std
|
351
351
|
@xn = xn
|
352
|
-
@
|
353
|
-
@
|
352
|
+
@running_mean.data = @momentum * @running_mean.data + (1 - @momentum) * mean
|
353
|
+
@running_var.data = @momentum * @running_var.data + (1 - @momentum) * var
|
354
354
|
else
|
355
|
-
xc = x - @
|
356
|
-
xn = xc / Xumo::NMath.sqrt(@
|
355
|
+
xc = x - @running_mean.data
|
356
|
+
xn = xc / Xumo::NMath.sqrt(@running_var.data + 1e-7)
|
357
357
|
end
|
358
358
|
@gamma.data * xn + @beta.data
|
359
359
|
end
|
@@ -378,12 +378,10 @@ module DNN
|
|
378
378
|
private
|
379
379
|
|
380
380
|
def init_params
|
381
|
-
@params[:gamma] = @gamma =
|
382
|
-
@params[:beta] = @beta =
|
383
|
-
@
|
384
|
-
@
|
385
|
-
@params[:running_mean] = Xumo::SFloat.zeros(*shape)
|
386
|
-
@params[:running_var] = Xumo::SFloat.zeros(*shape)
|
381
|
+
@params[:gamma] = @gamma = Param.new(Xumo::SFloat.ones(*shape))
|
382
|
+
@params[:beta] = @beta = Param.new(Xumo::SFloat.zeros(*shape))
|
383
|
+
@params[:running_mean] = @running_mean = Param.new(Xumo::SFloat.zeros(*shape))
|
384
|
+
@params[:running_var] = @running_var = Param.new(Xumo::SFloat.zeros(*shape))
|
387
385
|
end
|
388
386
|
end
|
389
387
|
end
|
data/lib/dnn/core/model.rb
CHANGED
@@ -37,7 +37,7 @@ module DNN
|
|
37
37
|
hash_params.each do |key, (shape, base64_param)|
|
38
38
|
bin = Base64.decode64(base64_param)
|
39
39
|
data = Xumo::SFloat.from_binary(bin).reshape(*shape)
|
40
|
-
if layer.params[key].is_a?(
|
40
|
+
if layer.params[key].is_a?(Param)
|
41
41
|
layer.params[key].data = data
|
42
42
|
else
|
43
43
|
layer.params[key] = data
|
@@ -68,9 +68,8 @@ module DNN
|
|
68
68
|
has_param_layers = @layers.select { |layer| layer.is_a?(Layers::HasParamLayer) }
|
69
69
|
has_param_layers_params = has_param_layers.map do |layer|
|
70
70
|
layer.params.map { |key, param|
|
71
|
-
|
72
|
-
|
73
|
-
[key, [param.shape, base64_param]]
|
71
|
+
base64_data = Base64.encode64(param.data.to_binary)
|
72
|
+
[key, [param.data.shape, base64_data]]
|
74
73
|
}.to_h
|
75
74
|
end
|
76
75
|
JSON.dump(has_param_layers_params)
|
data/lib/dnn/core/optimizers.rb
CHANGED
@@ -37,7 +37,7 @@ module DNN
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def update(params)
|
40
|
-
params.select { |key, param| param.
|
40
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
41
41
|
amount = param.grad * @learning_rate
|
42
42
|
if @momentum > 0
|
43
43
|
@v[param] ||= 0
|
@@ -64,7 +64,7 @@ module DNN
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def update(params)
|
67
|
-
params.select { |key, param| param.
|
67
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
68
68
|
@v[param] ||= 0
|
69
69
|
amount = param.grad * @learning_rate
|
70
70
|
@v[param] = @v[param] * @momentum - amount
|
@@ -85,7 +85,7 @@ module DNN
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def update(params)
|
88
|
-
params.select { |key, param| param.
|
88
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
89
89
|
@g[param] ||= 0
|
90
90
|
@g[param] += param.grad**2
|
91
91
|
param.data -= (@learning_rate / Xumo::NMath.sqrt(@g[param] + 1e-7)) * param.grad
|
@@ -108,7 +108,7 @@ module DNN
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def update(params)
|
111
|
-
params.select { |key, param| param.
|
111
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
112
112
|
@g[param] ||= 0
|
113
113
|
@g[param] = @alpha * @g[param] + (1 - @alpha) * param.grad**2
|
114
114
|
param.data -= (@learning_rate / Xumo::NMath.sqrt(@g[param] + 1e-7)) * param.grad
|
@@ -136,7 +136,7 @@ module DNN
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def update(params)
|
139
|
-
params.select { |key, param| param.
|
139
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
140
140
|
@h[param] ||= Xumo::SFloat.zeros(*param.data.shape)
|
141
141
|
@s[param] ||= Xumo::SFloat.zeros(*param.data.shape)
|
142
142
|
@h[param] = @rho * @h[param] + (1 - @rho) * param.grad**2
|
@@ -172,7 +172,7 @@ module DNN
|
|
172
172
|
def update(params)
|
173
173
|
@iter += 1
|
174
174
|
lr = @learning_rate * Math.sqrt(1 - @beta2**@iter) / (1 - @beta1**@iter)
|
175
|
-
params.select { |key, param| param.
|
175
|
+
params.select { |key, param| param.grad }.each_value do |param|
|
176
176
|
@m[param] ||= 0
|
177
177
|
@v[param] ||= 0
|
178
178
|
@m[param] += (1 - @beta1) * (param.grad - @m[param])
|
data/lib/dnn/core/rnn_layers.rb
CHANGED
data/lib/dnn/lib/cifar10.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require "open-uri"
|
2
1
|
require "zlib"
|
3
2
|
require "archive/tar/minitar"
|
4
3
|
require_relative "../ext/cifar10_loader/cifar10_loader"
|
4
|
+
require_relative "downloader"
|
5
5
|
|
6
6
|
URL_CIFAR10 = "https://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz"
|
7
7
|
CIFAR10_DIR = "cifar-10-batches-bin"
|
@@ -10,27 +10,19 @@ module DNN
|
|
10
10
|
module CIFAR10
|
11
11
|
class DNN_CIFAR10_LoadError < DNN_Error; end
|
12
12
|
|
13
|
-
class DNN_CIFAR10_DownloadError < DNN_Error; end
|
14
|
-
|
15
13
|
private_class_method :load_binary
|
16
14
|
|
17
15
|
def self.downloads
|
18
16
|
return if Dir.exist?(__dir__ + "/" + CIFAR10_DIR)
|
17
|
+
Downloader.download(URL_CIFAR10)
|
19
18
|
cifar10_binary_file_name = __dir__ + "/" + URL_CIFAR10.match(%r`.+/(.+)`)[1]
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
begin
|
24
|
-
Zlib::GzipReader.open(cifar10_binary_file_name) do |gz|
|
25
|
-
Archive::Tar::Minitar::unpack(gz, __dir__)
|
26
|
-
end
|
27
|
-
ensure
|
28
|
-
File.unlink(cifar10_binary_file_name)
|
19
|
+
begin
|
20
|
+
Zlib::GzipReader.open(cifar10_binary_file_name) do |gz|
|
21
|
+
Archive::Tar::Minitar::unpack(gz, __dir__)
|
29
22
|
end
|
23
|
+
ensure
|
24
|
+
File.unlink(cifar10_binary_file_name)
|
30
25
|
end
|
31
|
-
puts "The download has ended."
|
32
|
-
rescue => ex
|
33
|
-
raise DNN_CIFAR10_DownloadError.new(ex.message)
|
34
26
|
end
|
35
27
|
|
36
28
|
def self.load_train
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "net/http"
|
2
|
+
|
3
|
+
module DNN
|
4
|
+
|
5
|
+
class DNN_DownloadError < DNN_Error; end
|
6
|
+
|
7
|
+
class Downloader
|
8
|
+
def self.download(url, dir_path = __dir__)
|
9
|
+
Downloader.new(url).download(dir_path)
|
10
|
+
rescue => ex
|
11
|
+
raise DNN_DownloadError.new(ex.message)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(url)
|
15
|
+
@url = url
|
16
|
+
*, @fqdn, @path = *url.match(%r`https?://(.+?)(/.+)`)
|
17
|
+
end
|
18
|
+
|
19
|
+
def download(dir_path)
|
20
|
+
puts %`download "#{@url}"`
|
21
|
+
buf = ""
|
22
|
+
Net::HTTP.start(@fqdn) do |http|
|
23
|
+
content_length = http.head(@path).content_length
|
24
|
+
http.get(@path) do |body_segment|
|
25
|
+
buf << body_segment
|
26
|
+
log = "\r"
|
27
|
+
40.times do |i|
|
28
|
+
if i < buf.size * 40 / content_length
|
29
|
+
log << "="
|
30
|
+
elsif i == buf.size * 40 / content_length
|
31
|
+
log << ">"
|
32
|
+
else
|
33
|
+
log << "_"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
log << " #{buf.size}/#{content_length}"
|
37
|
+
print log
|
38
|
+
end
|
39
|
+
puts ""
|
40
|
+
end
|
41
|
+
file_name = @path.match(%r`.+/(.+)`)[1]
|
42
|
+
File.binwrite("#{dir_path}/#{file_name}", buf)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/lib/dnn/lib/mnist.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
require "open-uri"
|
2
1
|
require "zlib"
|
3
2
|
require_relative "../core/error"
|
3
|
+
require_relative "downloader"
|
4
4
|
|
5
5
|
module DNN
|
6
6
|
module MNIST
|
7
7
|
class DNN_MNIST_LoadError < DNN_Error; end
|
8
8
|
|
9
|
-
class DNN_MNIST_DownloadError < DNN_Error; end
|
10
|
-
|
11
9
|
URL_TRAIN_IMAGES = "http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"
|
12
10
|
URL_TRAIN_LABELS = "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"
|
13
11
|
URL_TEST_IMAGES = "http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz"
|
@@ -16,12 +14,10 @@ module DNN
|
|
16
14
|
def self.downloads
|
17
15
|
return if Dir.exist?(mnist_dir)
|
18
16
|
Dir.mkdir(mnist_dir)
|
19
|
-
|
20
|
-
download(
|
21
|
-
download(
|
22
|
-
download(
|
23
|
-
download(URL_TEST_LABELS)
|
24
|
-
puts "The download has ended."
|
17
|
+
Downloader.download(URL_TRAIN_IMAGES, mnist_dir)
|
18
|
+
Downloader.download(URL_TRAIN_LABELS, mnist_dir)
|
19
|
+
Downloader.download(URL_TEST_IMAGES, mnist_dir)
|
20
|
+
Downloader.download(URL_TEST_LABELS, mnist_dir)
|
25
21
|
end
|
26
22
|
|
27
23
|
def self.load_train
|
@@ -56,14 +52,6 @@ module DNN
|
|
56
52
|
|
57
53
|
private_class_method
|
58
54
|
|
59
|
-
def self.download(url)
|
60
|
-
open(url, "rb") do |f|
|
61
|
-
File.binwrite(url_to_file_name(url), f.read)
|
62
|
-
end
|
63
|
-
rescue => ex
|
64
|
-
raise DNN_MNIST_DownloadError.new(ex.message)
|
65
|
-
end
|
66
|
-
|
67
55
|
def self.load_images(file_name)
|
68
56
|
images = nil
|
69
57
|
Zlib::GzipReader.open(file_name) do |f|
|
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.8.
|
4
|
+
version: 0.8.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- unagiootoro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: numo-narray
|
@@ -111,9 +111,9 @@ files:
|
|
111
111
|
- lib/dnn/core/error.rb
|
112
112
|
- lib/dnn/core/initializers.rb
|
113
113
|
- lib/dnn/core/layers.rb
|
114
|
-
- lib/dnn/core/learning_param.rb
|
115
114
|
- lib/dnn/core/model.rb
|
116
115
|
- lib/dnn/core/optimizers.rb
|
116
|
+
- lib/dnn/core/param.rb
|
117
117
|
- lib/dnn/core/rnn_layers.rb
|
118
118
|
- lib/dnn/core/util.rb
|
119
119
|
- lib/dnn/ext/cifar10_loader/cifar10_loader.c
|
@@ -123,6 +123,7 @@ files:
|
|
123
123
|
- lib/dnn/ext/rb_stb_image/stb_image.h
|
124
124
|
- lib/dnn/ext/rb_stb_image/stb_image_write.h
|
125
125
|
- lib/dnn/lib/cifar10.rb
|
126
|
+
- lib/dnn/lib/downloader.rb
|
126
127
|
- lib/dnn/lib/image.rb
|
127
128
|
- lib/dnn/lib/mnist.rb
|
128
129
|
- lib/dnn/version.rb
|