tensor_stream 1.0.7 → 1.0.8
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/lib/tensor_stream/evaluator/ruby/images_ops.rb +18 -0
- data/lib/tensor_stream/evaluator/ruby/math_ops.rb +1 -1
- data/lib/tensor_stream/evaluator/ruby/random_ops.rb +7 -11
- data/lib/tensor_stream/evaluator/ruby_evaluator.rb +10 -10
- data/lib/tensor_stream/images.rb +4 -0
- data/lib/tensor_stream/ops.rb +2 -3
- data/lib/tensor_stream/version.rb +1 -1
- data/tensor_stream.gemspec +3 -1
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 712b5d17b1b84d5289970fa578a8385c80e2a499033a42df8aadefdad654276c
|
4
|
+
data.tar.gz: ed74482c5913ea6debc5d0902d01c180b52f5028ae1ed7be726bafede9671982
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95b1715323930f35aeec861efa7b5dd96f9b61c8ea2d45343306798506cbbbc64e0092fed77c615a27e53b219610b7b14384726b5fb976b800c7ce57bcfc1539
|
7
|
+
data.tar.gz: 45e92e91167a39ca02cc5a1c04022c0dc1942ad863b650710b93862400174dbddd0bbe1889659ef55651bf1ca0b779420fd48811f862c8707be068cd02abed9f
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "chunky_png"
|
2
2
|
|
3
|
+
|
3
4
|
module TensorStream
|
4
5
|
module ImagesOps
|
5
6
|
def self.included(klass)
|
@@ -49,6 +50,23 @@ module TensorStream
|
|
49
50
|
TensorShape.reshape(image_data, [image.height, image.width, channels])
|
50
51
|
end
|
51
52
|
|
53
|
+
register_op :decode_jpg do |_context, tensor, inputs|
|
54
|
+
require "jpeg"
|
55
|
+
|
56
|
+
content = inputs[0]
|
57
|
+
channels = tensor.options[:channels]
|
58
|
+
channels = 3 if channels.zero?
|
59
|
+
|
60
|
+
image = Jpeg::Image.open_buffer(content)
|
61
|
+
image_data = image.raw_data.map do |pixel|
|
62
|
+
pixel.map!(&:to_f) if fp_type?(tensor.data_type)
|
63
|
+
|
64
|
+
pixel
|
65
|
+
end
|
66
|
+
|
67
|
+
TensorShape.reshape(image_data, [image.height, image.width, channels])
|
68
|
+
end
|
69
|
+
|
52
70
|
register_op :encode_png do |_context, tensor, inputs|
|
53
71
|
image_data = inputs[0]
|
54
72
|
height, width, channels = shape_eval(image_data)
|
@@ -169,7 +169,7 @@ module TensorStream
|
|
169
169
|
sorted = tensor.options[:sorted]
|
170
170
|
work_values = TensorShape.reshape(values, [-1, v_shape.last])
|
171
171
|
work_values.map! do |row|
|
172
|
-
last_k = row.map.with_index { |r, index| [r, index] }.sort! { |a,b| a[0] <=> b[0] }.last(k)
|
172
|
+
last_k = row.map.with_index { |r, index| [r, index] }.sort! { |a,b| a[0] <=> b[0] }.last(k)
|
173
173
|
last_k.reverse! if sorted
|
174
174
|
last_k
|
175
175
|
end
|
@@ -9,12 +9,12 @@ module TensorStream
|
|
9
9
|
|
10
10
|
shape = tensor.options[:shape] || tensor.shape.shape
|
11
11
|
fan_in, fan_out = if shape.size.zero?
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
[1, 1]
|
13
|
+
elsif shape.size == 1
|
14
|
+
[1, shape[0]]
|
15
|
+
else
|
16
|
+
[shape[0], shape.last]
|
17
|
+
end
|
18
18
|
|
19
19
|
limit = Math.sqrt(6.0 / (fan_in + fan_out))
|
20
20
|
|
@@ -50,7 +50,7 @@ module TensorStream
|
|
50
50
|
seed = tensor.options[:seed]
|
51
51
|
random = _get_randomizer(tensor, seed)
|
52
52
|
r = RandomGaussian.new(tensor.options.fetch(:mean), tensor.options.fetch(:stddev), -> { random.rand })
|
53
|
-
|
53
|
+
|
54
54
|
generator = -> { r.rand }
|
55
55
|
shape = inputs[0] || tensor.shape.shape
|
56
56
|
random_values = Array.new(shape.reduce(:*) || 1) {
|
@@ -75,9 +75,6 @@ module TensorStream
|
|
75
75
|
|
76
76
|
norm_min = (minval - mean) / stddev
|
77
77
|
norm_max = (maxval - mean) / stddev
|
78
|
-
sqrt_factor = Math.sqrt((norm_min * norm_min) + 4.0)
|
79
|
-
cutoff = 2.0 * Math.exp(0.5 + (norm_min * (norm_min - sqrt_factor)) / 4.0) / (norm_min + sqrt_factor)
|
80
|
-
diff = norm_max - norm_min
|
81
78
|
|
82
79
|
val = random_values.map { |v|
|
83
80
|
iterations = 0
|
@@ -93,7 +90,6 @@ module TensorStream
|
|
93
90
|
|
94
91
|
pick
|
95
92
|
}
|
96
|
-
|
97
93
|
TensorShape.reshape(val, shape)
|
98
94
|
end
|
99
95
|
end
|
@@ -49,12 +49,12 @@ module TensorStream
|
|
49
49
|
|
50
50
|
child_context = execution_context.dup
|
51
51
|
res = if tensor.is_a?(Operation)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
eval_operation(tensor, child_context)
|
53
|
+
elsif !tensor.is_a?(Tensor)
|
54
|
+
tensor
|
55
|
+
else
|
56
|
+
tensor.op
|
57
|
+
end
|
58
58
|
execution_context.deep_merge!(returns: child_context[:returns])
|
59
59
|
res
|
60
60
|
end
|
@@ -286,7 +286,7 @@ module TensorStream
|
|
286
286
|
def eval_operation(tensor, child_context)
|
287
287
|
return @context[tensor.name] if @context.key?(tensor.name)
|
288
288
|
|
289
|
-
# puts "ruby eval #{object_id}: #{tensor.name}"
|
289
|
+
# puts "ruby eval #{tensor.operation} -> #{object_id}: #{tensor.name}"
|
290
290
|
invoke(tensor, child_context).tap do |result|
|
291
291
|
# puts "result done ruby #{object_id}: #{tensor.name}"
|
292
292
|
# assertions to make sure inferred shapes == actual evaluated shapes
|
@@ -314,10 +314,10 @@ module TensorStream
|
|
314
314
|
@context[tensor.name] = result
|
315
315
|
end
|
316
316
|
rescue EvaluatorExcecutionException => e
|
317
|
-
raise e, "error #{e.message} while evaluating #{tensor.name}
|
317
|
+
raise e, "error #{e.message} while evaluating #{tensor.name} defined at #{tensor.source}"
|
318
318
|
rescue TensorStreamError => e
|
319
|
-
raise e, "error #{e.message} while evaluating #{tensor.name}
|
320
|
-
rescue => e
|
319
|
+
raise e, "error #{e.message} while evaluating #{tensor.name} defined at #{tensor.source}"
|
320
|
+
rescue StandardError => e
|
321
321
|
puts e.message
|
322
322
|
puts e.backtrace.join("\n")
|
323
323
|
raise EvaluatorExcecutionException.new(e, tensor), "error #{e.message} while evaluating #{tensor.name} : #{tensor.to_math(true, 1)} defined at #{tensor.source}"
|
data/lib/tensor_stream/images.rb
CHANGED
@@ -7,6 +7,10 @@ module TensorStream
|
|
7
7
|
_op(:decode_png, contents, channels: channels, data_type: dtype, name: name, new_shape: new_shape)
|
8
8
|
end
|
9
9
|
|
10
|
+
def self.decode_jpeg(contents, channels: 0, dtype: :uint8, name: nil, new_shape: nil)
|
11
|
+
_op(:decode_jpg, contents, channels: channels, data_type: dtype, name: name, new_shape: new_shape)
|
12
|
+
end
|
13
|
+
|
10
14
|
def self.encode_png(contents, compression: -1, name: nil, new_shape: nil, resample_method: nil)
|
11
15
|
check_allowed_types(contents, %i[uint8 uint16])
|
12
16
|
contents = convert_to_tensor(contents, dtype: :uint16)
|
data/lib/tensor_stream/ops.rb
CHANGED
@@ -70,9 +70,8 @@ module TensorStream
|
|
70
70
|
|
71
71
|
##
|
72
72
|
# Outputs random values from a truncated normal distribution.
|
73
|
-
def truncated_normal(shape, dtype: :float32, mean: 0.0, stddev: 1.0, seed: nil, name: nil)
|
74
|
-
|
75
|
-
_op(:truncated_normal, shape, options)
|
73
|
+
def truncated_normal(shape, dtype: :float32, mean: 0.0, stddev: 1.0, seed: nil, name: nil, pre_gen_table_size: nil)
|
74
|
+
_op(:truncated_normal, shape, dtype: dtype, mean: mean, stddev: stddev, seed: seed, name: name, pre_gen_table_size: pre_gen_table_size)
|
76
75
|
end
|
77
76
|
|
78
77
|
##
|
data/tensor_stream.gemspec
CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
18
|
if spec.respond_to?(:metadata)
|
19
19
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/jedld/tensor_stream"
|
20
21
|
spec.metadata["changelog_uri"] = "https://github.com/jedld/tensor_stream/blob/master/CHANGELOG.md"
|
21
22
|
else
|
22
23
|
raise "RubyGems 2.0 or newer is required to protect against " \
|
@@ -30,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
30
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
32
|
spec.require_paths = ["lib"]
|
32
33
|
|
33
|
-
spec.add_development_dependency "bundler"
|
34
|
+
spec.add_development_dependency "bundler"
|
34
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
35
36
|
spec.add_development_dependency "rspec", "~> 3.0"
|
36
37
|
spec.add_development_dependency "awesome_print"
|
@@ -39,6 +40,7 @@ Gem::Specification.new do |spec|
|
|
39
40
|
spec.add_development_dependency "pry-byebug"
|
40
41
|
spec.add_development_dependency "byepry"
|
41
42
|
spec.add_development_dependency "tensor_stream-opencl"
|
43
|
+
spec.add_dependency "jpeg"
|
42
44
|
end
|
43
45
|
spec.add_development_dependency "colorize"
|
44
46
|
spec.add_development_dependency "rspec_junit_formatter"
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tensor_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Emmanuel Dayo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: jpeg
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: colorize
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -435,6 +449,7 @@ licenses:
|
|
435
449
|
- MIT
|
436
450
|
metadata:
|
437
451
|
allowed_push_host: https://rubygems.org
|
452
|
+
source_code_uri: https://github.com/jedld/tensor_stream
|
438
453
|
changelog_uri: https://github.com/jedld/tensor_stream/blob/master/CHANGELOG.md
|
439
454
|
post_install_message:
|
440
455
|
rdoc_options: []
|
@@ -451,7 +466,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
451
466
|
- !ruby/object:Gem::Version
|
452
467
|
version: '0'
|
453
468
|
requirements: []
|
454
|
-
rubygems_version: 3.0.
|
469
|
+
rubygems_version: 3.0.3
|
455
470
|
signing_key:
|
456
471
|
specification_version: 4
|
457
472
|
summary: A Pure ruby tensorflow implementation
|