tensor_stream 0.1.0 → 0.1.1
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 +5 -5
- data/README.md +1 -1
- data/lib/tensor_stream/evaluator/ruby_evaluator.rb +11 -18
- data/lib/tensor_stream/math_gradients.rb +5 -6
- data/lib/tensor_stream/ops.rb +32 -8
- data/lib/tensor_stream/tensor.rb +4 -4
- data/lib/tensor_stream/version.rb +1 -1
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fdcfc961fddc348440126986de425c0b1784c235
|
4
|
+
data.tar.gz: 35649e38711773b0caf91ed791166cc8a733c2a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2ac76af196eab64d2fadd327e724fd927f3de52d2fd1043896299f95022f92c5c5d833d0d18ed16ce1b5acac1fb29d292bb73f4036a15265ddea662af87a09c
|
7
|
+
data.tar.gz: bd0b0b4078bd9d347e984bc2dde41952cd268b75d5697a1f7b722792fc171ff19bb9aebc41ec0199c092494f1aa9e0e3f9e635d848cf0e7cdb68b132ce66ebd7
|
data/README.md
CHANGED
@@ -114,7 +114,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
114
114
|
|
115
115
|
## Contributing
|
116
116
|
|
117
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/
|
117
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tensor_stream. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
118
118
|
|
119
119
|
|
120
120
|
## License
|
@@ -262,6 +262,16 @@ module TensorStream
|
|
262
262
|
b = complete_eval(b, child_context)
|
263
263
|
|
264
264
|
call_vector_op(:greater, a, b, child_context, ->(t, u) { t > u })
|
265
|
+
when :greater_equal
|
266
|
+
a = complete_eval(a, child_context)
|
267
|
+
b = complete_eval(b, child_context)
|
268
|
+
|
269
|
+
call_vector_op(:greater_equal, a, b, child_context, ->(t, u) { t >= u })
|
270
|
+
when :less_equal
|
271
|
+
a = complete_eval(a, child_context)
|
272
|
+
b = complete_eval(b, child_context)
|
273
|
+
|
274
|
+
call_vector_op(:less_equal, a, b, child_context, ->(t, u) { t <= u })
|
265
275
|
when :zeros, :ones, :zeros_like, :ones_like
|
266
276
|
|
267
277
|
shape = if %i[zeros_like ones_like].include?(tensor.operation)
|
@@ -309,24 +319,7 @@ module TensorStream
|
|
309
319
|
|
310
320
|
(Matrix[*matrix_a] * Matrix[*matrix_b]).to_a
|
311
321
|
when :gradients
|
312
|
-
|
313
|
-
fail "#{xs} passed is not a tensor object" unless xs.is_a?(Tensor)
|
314
|
-
xs_val = complete_eval(xs, child_context)
|
315
|
-
target_shape = shape_eval(xs_val)
|
316
|
-
|
317
|
-
stops = tensor.options[:stop_gradients] ? tensor.options[:stop_gradients].map(&:name).join('_') : ''
|
318
|
-
gradient_program_name = "grad_#{tensor.name}_#{xs.name}_#{stops}".to_sym
|
319
|
-
|
320
|
-
tensor_program = if tensor.graph.node_added?(gradient_program_name)
|
321
|
-
tensor.graph.get_node(gradient_program_name)
|
322
|
-
else
|
323
|
-
derivative_ops = TensorStream::MathGradients.derivative(a, xs, graph: tensor.graph, stop_gradients: tensor.options[:stop_gradients], target_shape: target_shape)
|
324
|
-
unit_matrix = op(:ones_like, xs)
|
325
|
-
tensor.graph.add_node!(gradient_program_name, unit_matrix * derivative_ops)
|
326
|
-
end
|
327
|
-
|
328
|
-
complete_eval(tensor_program, child_context)
|
329
|
-
end
|
322
|
+
fail "not implemented in evaluator"
|
330
323
|
when :identity
|
331
324
|
complete_eval(a, child_context)
|
332
325
|
when :print
|
@@ -7,11 +7,10 @@ module TensorStream
|
|
7
7
|
gradient_program_name = "_grad_#{tensor.name}_#{dx.name}"
|
8
8
|
return options[:graph].get_node(gradient_program_name) if options[:graph] && options[:graph].node_added?(gradient_program_name)
|
9
9
|
|
10
|
-
target_shape = options[:target_shape]
|
11
10
|
constant_options = { dtype: options[:dtype] }
|
12
|
-
constant_options_1 = { dtype: options[:dtype] || tensor.data_type
|
11
|
+
constant_options_1 = { dtype: options[:dtype] || tensor.data_type }
|
13
12
|
|
14
|
-
return
|
13
|
+
return i_op(:ones_like, dx, constant_options_1) if tensor.equal?(dx)
|
15
14
|
return i_cons(0, constant_options) if options[:stop_gradients] && _include?(options[:stop_gradients], tensor)
|
16
15
|
|
17
16
|
if tensor.is_a?(Operation)
|
@@ -85,8 +84,8 @@ module TensorStream
|
|
85
84
|
tensor_shape1 = tensor.items[1].shape ? tensor.items[1].shape.shape : nil
|
86
85
|
tensor_shape0 = tensor.items[0].shape ? tensor.items[0].shape.shape : nil
|
87
86
|
|
88
|
-
derivative_a = derivative(tensor.items[0], dx
|
89
|
-
derivative_b = derivative(tensor.items[1], dx
|
87
|
+
derivative_a = derivative(tensor.items[0], dx)
|
88
|
+
derivative_b = derivative(tensor.items[1], dx)
|
90
89
|
|
91
90
|
s0 = i_op(:shape, tensor.items[0])
|
92
91
|
s1 = i_op(:shape, tensor.items[1])
|
@@ -101,7 +100,7 @@ module TensorStream
|
|
101
100
|
pad_zeros: true,
|
102
101
|
name: 'matrix_dy')
|
103
102
|
|
104
|
-
zero_vect = i_op(:
|
103
|
+
zero_vect = i_op(:zeros_like, dx, nil, name: 'zero_vect')
|
105
104
|
|
106
105
|
# matmul_db = op(:transpose, matmul_db, nil).first
|
107
106
|
|
data/lib/tensor_stream/ops.rb
CHANGED
@@ -8,14 +8,30 @@ module TensorStream
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def gradients(ys, xs, grad_ys: nil,
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
name: 'gradients',
|
12
|
+
colocate_gradients_with_ops: false,
|
13
|
+
gate_gradients: false,
|
14
|
+
aggregation_method: nil,
|
15
|
+
stop_gradients: nil
|
16
|
+
)
|
17
|
+
|
18
|
+
gs = xs.collect do |x|
|
19
|
+
fail "#{x} passed is not a tensor object" unless x.is_a?(Tensor)
|
20
|
+
|
21
|
+
stops = stop_gradients ? stop_gradients.map(&:name).join('_') : ''
|
22
|
+
gradient_program_name = "grad_#{ys.name}_#{x.name}_#{stops}".to_sym
|
23
|
+
|
24
|
+
tensor_program = if ys.graph.node_added?(gradient_program_name)
|
25
|
+
ys.graph.get_node(gradient_program_name)
|
26
|
+
else
|
27
|
+
derivative_ops = TensorStream::MathGradients.derivative(ys, x, graph: ys.graph,
|
28
|
+
stop_gradients: stop_gradients)
|
29
|
+
unit_matrix = op(:ones_like, x)
|
30
|
+
ys.graph.add_node!(gradient_program_name, unit_matrix * derivative_ops)
|
31
|
+
end
|
32
|
+
tensor_program
|
33
|
+
end
|
34
|
+
TensorStream.group(gs)
|
19
35
|
end
|
20
36
|
|
21
37
|
def random_uniform(shape, dtype: :float32, minval: 0, maxval: 1, seed: nil, name: nil)
|
@@ -67,6 +83,14 @@ module TensorStream
|
|
67
83
|
def greater(a, b, name: nil)
|
68
84
|
op(:greater, a, b, name: name)
|
69
85
|
end
|
86
|
+
|
87
|
+
def greater_equal(a, b, name: nil)
|
88
|
+
op(:greater_equal, a, b, name: name)
|
89
|
+
end
|
90
|
+
|
91
|
+
def less_equal(a, b, name: nil)
|
92
|
+
op(:less_equal, a, b, name: name)
|
93
|
+
end
|
70
94
|
|
71
95
|
def reduce_mean(input_tensor, axis = nil, keepdims: false, name: nil)
|
72
96
|
op(:reduce_mean, input_tensor, nil, axis: axis, keepdims: keepdims, name: name)
|
data/lib/tensor_stream/tensor.rb
CHANGED
@@ -133,10 +133,6 @@ module TensorStream
|
|
133
133
|
op(:not_equal, self, operand)
|
134
134
|
end
|
135
135
|
|
136
|
-
def <=(operand)
|
137
|
-
op(:less_equal, self, operand)
|
138
|
-
end
|
139
|
-
|
140
136
|
def >(operand)
|
141
137
|
op(:greater, self, operand)
|
142
138
|
end
|
@@ -145,6 +141,10 @@ module TensorStream
|
|
145
141
|
op(:greater_equal, self, operand)
|
146
142
|
end
|
147
143
|
|
144
|
+
def <=(operand)
|
145
|
+
op(:less_equal, self, operand)
|
146
|
+
end
|
147
|
+
|
148
148
|
def collect(&block)
|
149
149
|
@value.collect(&block)
|
150
150
|
end
|
metadata
CHANGED
@@ -1,108 +1,108 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tensor_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Emmanuel Dayo
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '1.14'
|
19
|
-
name: bundler
|
20
|
-
prerelease: false
|
21
20
|
type: :development
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.14'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '10.0'
|
33
|
-
name: rake
|
34
|
-
prerelease: false
|
35
34
|
type: :development
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
45
|
- - "~>"
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '3.0'
|
47
|
-
name: rspec
|
48
|
-
prerelease: false
|
49
48
|
type: :development
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: awesome_print
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
59
|
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
|
-
name: awesome_print
|
62
|
-
prerelease: false
|
63
62
|
type: :development
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
70
71
|
requirement: !ruby/object:Gem::Requirement
|
71
72
|
requirements:
|
72
73
|
- - ">="
|
73
74
|
- !ruby/object:Gem::Version
|
74
75
|
version: '0'
|
75
|
-
name: rubocop
|
76
|
-
prerelease: false
|
77
76
|
type: :development
|
77
|
+
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
+
name: deep_merge
|
84
85
|
requirement: !ruby/object:Gem::Requirement
|
85
86
|
requirements:
|
86
87
|
- - ">="
|
87
88
|
- !ruby/object:Gem::Version
|
88
89
|
version: '0'
|
89
|
-
name: deep_merge
|
90
|
-
prerelease: false
|
91
90
|
type: :runtime
|
91
|
+
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
+
name: concurrent-ruby
|
98
99
|
requirement: !ruby/object:Gem::Requirement
|
99
100
|
requirements:
|
100
101
|
- - ">="
|
101
102
|
- !ruby/object:Gem::Version
|
102
103
|
version: '0'
|
103
|
-
name: concurrent-ruby
|
104
|
-
prerelease: false
|
105
104
|
type: :runtime
|
105
|
+
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|
@@ -162,7 +162,7 @@ licenses:
|
|
162
162
|
- MIT
|
163
163
|
metadata:
|
164
164
|
allowed_push_host: https://rubygems.org
|
165
|
-
post_install_message:
|
165
|
+
post_install_message:
|
166
166
|
rdoc_options: []
|
167
167
|
require_paths:
|
168
168
|
- lib
|
@@ -177,9 +177,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
- !ruby/object:Gem::Version
|
178
178
|
version: '0'
|
179
179
|
requirements: []
|
180
|
-
rubyforge_project:
|
181
|
-
rubygems_version: 2.6.
|
182
|
-
signing_key:
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.6.11
|
182
|
+
signing_key:
|
183
183
|
specification_version: 4
|
184
184
|
summary: A Pure ruby tensorflow implementation
|
185
185
|
test_files: []
|