tensor_stream 0.8.1 → 0.8.5
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/.gitignore +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +12 -6
- data/lib/tensor_stream.rb +1 -0
- data/lib/tensor_stream/evaluator/base_evaluator.rb +1 -1
- data/lib/tensor_stream/evaluator/ruby/array_ops.rb +282 -0
- data/lib/tensor_stream/evaluator/ruby/images_ops.rb +61 -0
- data/lib/tensor_stream/evaluator/ruby/math_ops.rb +111 -0
- data/lib/tensor_stream/evaluator/ruby/nn_ops.rb +48 -9
- data/lib/tensor_stream/evaluator/ruby/random_ops.rb +51 -0
- data/lib/tensor_stream/evaluator/ruby_evaluator.rb +20 -433
- data/lib/tensor_stream/images.rb +16 -0
- data/lib/tensor_stream/ops.rb +5 -1
- data/lib/tensor_stream/session.rb +15 -15
- data/lib/tensor_stream/tensor.rb +1 -1
- data/lib/tensor_stream/train/adadelta_optimizer.rb +52 -0
- data/lib/tensor_stream/train/adam_optimizer.rb +17 -2
- data/lib/tensor_stream/train/gradient_descent_optimizer.rb +7 -1
- data/lib/tensor_stream/trainer.rb +1 -0
- data/lib/tensor_stream/types.rb +4 -0
- data/lib/tensor_stream/utils.rb +4 -0
- data/lib/tensor_stream/variable_scope.rb +1 -0
- data/lib/tensor_stream/version.rb +1 -1
- data/samples/linear_regression.rb +4 -1
- data/samples/mnist_data.rb +64 -0
- data/samples/nearest_neighbor.rb +1 -2
- data/samples/raw_neural_net_sample.rb +1 -1
- data/tensor_stream.gemspec +1 -0
- metadata +23 -57
- data/lib/tensor_stream/evaluator/opencl/kernels/_bool_operand.cl +0 -45
- data/lib/tensor_stream/evaluator/opencl/kernels/_operand.cl +0 -45
- data/lib/tensor_stream/evaluator/opencl/kernels/abs.cl +0 -20
- data/lib/tensor_stream/evaluator/opencl/kernels/acos.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/add.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/apply_adam.cl +0 -23
- data/lib/tensor_stream/evaluator/opencl/kernels/apply_gradient.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/apply_momentum.cl +0 -16
- data/lib/tensor_stream/evaluator/opencl/kernels/argmax.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/argmin.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/asin.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/cast.cl +0 -10
- data/lib/tensor_stream/evaluator/opencl/kernels/ceil.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/cond.cl.erb +0 -6
- data/lib/tensor_stream/evaluator/opencl/kernels/cos.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/div.cl.erb +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/exp.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/floor.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/floor_div.cl +0 -48
- data/lib/tensor_stream/evaluator/opencl/kernels/floor_mod.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/gemm.cl +0 -32
- data/lib/tensor_stream/evaluator/opencl/kernels/log.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/log1p.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/log_softmax.cl +0 -26
- data/lib/tensor_stream/evaluator/opencl/kernels/max.cl +0 -46
- data/lib/tensor_stream/evaluator/opencl/kernels/min.cl +0 -46
- data/lib/tensor_stream/evaluator/opencl/kernels/mod.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/mul.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/negate.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/pack.cl +0 -24
- data/lib/tensor_stream/evaluator/opencl/kernels/pow.cl +0 -46
- data/lib/tensor_stream/evaluator/opencl/kernels/real_div.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/reciprocal.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/round.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/sigmoid.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/sigmoid_grad.cl +0 -55
- data/lib/tensor_stream/evaluator/opencl/kernels/sign.cl +0 -21
- data/lib/tensor_stream/evaluator/opencl/kernels/sin.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax.cl +0 -26
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax_cross.cl +0 -32
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax_cross_grad.cl +0 -28
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax_grad.cl +0 -46
- data/lib/tensor_stream/evaluator/opencl/kernels/sqrt.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/square.cl +0 -9
- data/lib/tensor_stream/evaluator/opencl/kernels/squared_difference.cl +0 -53
- data/lib/tensor_stream/evaluator/opencl/kernels/sub.cl +0 -3
- data/lib/tensor_stream/evaluator/opencl/kernels/tan.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/tanh.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/kernels/tanh_grad.cl +0 -7
- data/lib/tensor_stream/evaluator/opencl/kernels/where.cl +0 -8
- data/lib/tensor_stream/evaluator/opencl/opencl_buffer.rb +0 -35
- data/lib/tensor_stream/evaluator/opencl/opencl_device.rb +0 -5
- data/lib/tensor_stream/evaluator/opencl/opencl_evaluator.rb +0 -1230
- data/lib/tensor_stream/evaluator/opencl/opencl_template_helper.rb +0 -95
@@ -0,0 +1,16 @@
|
|
1
|
+
module TensorStream
|
2
|
+
module Images
|
3
|
+
extend OpHelper
|
4
|
+
extend TensorStream::Utils
|
5
|
+
|
6
|
+
def self.decode_png(contents, channels: 0, dtype: :uint8, name: nil)
|
7
|
+
_op(:decode_png, contents, channels: channels, data_type: dtype, name: name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.encode_png(contents, compression: -1, name: nil)
|
11
|
+
check_allowed_types(contents, [:uint8, :uint16])
|
12
|
+
contents = convert_to_tensor(contents, dtype: :uint16)
|
13
|
+
_op(:encode_png, contents, compression: compression, name: name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/tensor_stream/ops.rb
CHANGED
@@ -2,7 +2,7 @@ module TensorStream
|
|
2
2
|
# Class that defines all available ops supported by TensorStream
|
3
3
|
module Ops
|
4
4
|
FLOATING_POINT_TYPES = %i[float32 float64 float].freeze
|
5
|
-
INTEGER_TYPES = %i[int32 int int64].freeze
|
5
|
+
INTEGER_TYPES = %i[uint8 int32 int int64].freeze
|
6
6
|
NUMERIC_TYPES = FLOATING_POINT_TYPES + INTEGER_TYPES
|
7
7
|
|
8
8
|
##
|
@@ -634,6 +634,10 @@ module TensorStream
|
|
634
634
|
_op(:stack, *values, axis: axis, name: name)
|
635
635
|
end
|
636
636
|
|
637
|
+
def squeeze(value, axis: [], name: nil)
|
638
|
+
_op(:squeeze, value, axis: axis, name: nil)
|
639
|
+
end
|
640
|
+
|
637
641
|
def setdiff1d(x, y, index_dtype: :int32, name: nil)
|
638
642
|
result = _op(:setdiff1d, x, y, index_dtype: index_dtype, name: name)
|
639
643
|
[result[0], result[1]]
|
@@ -124,21 +124,6 @@ module TensorStream
|
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
protected
|
128
|
-
|
129
|
-
def run_with_session_context(tensor, session_context, context)
|
130
|
-
session_context[:_cache][:placement][tensor.name] = assign_evaluator(tensor) if session_context[:_cache][:placement][tensor.name].nil?
|
131
|
-
session_context[:_cache][:placement][tensor.name][1].run_with_buffer(tensor, session_context, context)
|
132
|
-
end
|
133
|
-
|
134
|
-
def recursive_eval(value, depth = 2)
|
135
|
-
if value.is_a?(Array) && depth > 0
|
136
|
-
value.collect { |v| recursive_eval(v, depth - 1) }
|
137
|
-
else
|
138
|
-
value.respond_to?(:to_ruby) ? value.to_ruby : value
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
127
|
def assign_evaluator(tensor)
|
143
128
|
device = @evaluator_classes.map do |klass|
|
144
129
|
next nil if tensor.is_a?(Operation) && !klass.ops.include?(tensor.operation.to_sym)
|
@@ -157,6 +142,21 @@ module TensorStream
|
|
157
142
|
end
|
158
143
|
end
|
159
144
|
|
145
|
+
protected
|
146
|
+
|
147
|
+
def run_with_session_context(tensor, session_context, context)
|
148
|
+
session_context[:_cache][:placement][tensor.name] = assign_evaluator(tensor) if session_context[:_cache][:placement][tensor.name].nil?
|
149
|
+
session_context[:_cache][:placement][tensor.name][1].run_with_buffer(tensor, session_context, context)
|
150
|
+
end
|
151
|
+
|
152
|
+
def recursive_eval(value, depth = 2)
|
153
|
+
if value.is_a?(Array) && depth > 0
|
154
|
+
value.collect { |v| recursive_eval(v, depth - 1) }
|
155
|
+
else
|
156
|
+
value.respond_to?(:to_ruby) ? value.to_ruby : value
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
160
|
def prepare_evaluators(tensor_arr, context)
|
161
161
|
context[:_cache][:placement] ||= {}
|
162
162
|
|
data/lib/tensor_stream/tensor.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
module TensorStream
|
2
|
+
module Train
|
3
|
+
# High Level implementation of the Adadelta algorithm
|
4
|
+
class AdadeltaOptimizer < Optimizer
|
5
|
+
include TensorStream::OpHelper
|
6
|
+
|
7
|
+
attr_accessor :learning_rate
|
8
|
+
|
9
|
+
def initialize(learning_rate = 0.001, rho = 0.95, epsilon = 1e-8,
|
10
|
+
use_locking: false, name: "Adadelta")
|
11
|
+
@learning_rate = learning_rate
|
12
|
+
@rho = rho
|
13
|
+
@epsilon = epsilon
|
14
|
+
|
15
|
+
# Tensor versions of the constructor arguments, created in _prepare().
|
16
|
+
@learning_rate_tensor = nil
|
17
|
+
@rho_t = nil
|
18
|
+
@epsilon_t = nil
|
19
|
+
super(name: name, use_locking: use_locking)
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def create_slots(var_list)
|
25
|
+
var_list.each do |v|
|
26
|
+
zeros_slot(v, "accum", @name)
|
27
|
+
zeros_slot(v, "accum_update", @name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def prepare
|
32
|
+
@learning_rate_tensor = convert_to_tensor(@learning_rate, name: "lr")
|
33
|
+
@rho_t = convert_to_tensor(@rho, name: "rho")
|
34
|
+
@epsilon_t = convert_to_tensor(@epsilon, name: "epsilon")
|
35
|
+
end
|
36
|
+
|
37
|
+
def apply_dense(grad, var)
|
38
|
+
accum = get_slot(var, "accum")
|
39
|
+
accum_update = get_slot(var, "accum_update")
|
40
|
+
_op(:apply_adadelta,
|
41
|
+
var,
|
42
|
+
accum,
|
43
|
+
accum_update,
|
44
|
+
TensorStream.cast(@learning_rate_tensor, var.data_type),
|
45
|
+
TensorStream.cast(@rho_t, var.data_type),
|
46
|
+
TensorStream.cast(@epsilon_t, var.data_type),
|
47
|
+
grad,
|
48
|
+
use_locking: @use_locking)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -1,12 +1,27 @@
|
|
1
1
|
module TensorStream
|
2
2
|
module Train
|
3
|
-
# High Level implementation of the
|
3
|
+
# High Level implementation of the ADAM algorithm
|
4
4
|
class AdamOptimizer < Optimizer
|
5
5
|
include TensorStream::OpHelper
|
6
6
|
|
7
7
|
attr_accessor :learning_rate
|
8
8
|
|
9
|
-
|
9
|
+
##
|
10
|
+
# Construct a new Adam optimizer.
|
11
|
+
#
|
12
|
+
# Args:
|
13
|
+
# learning_rate: A Tensor or a floating point value. The learning rate.
|
14
|
+
# beta1: A float value or a constant float tensor.
|
15
|
+
# The exponential decay rate for the 1st moment estimates.
|
16
|
+
# beta2: A float value or a constant float tensor.
|
17
|
+
# The exponential decay rate for the 2nd moment estimates.
|
18
|
+
# epsilon: A small constant for numerical stability. This epsilon is
|
19
|
+
# "epsilon hat" in the Kingma and Ba paper (in the formula just before
|
20
|
+
# Section 2.1), not the epsilon in Algorithm 1 of the paper.
|
21
|
+
# use_locking: If True use locks for update operations.
|
22
|
+
# name: Optional name for the operations created when applying gradients.
|
23
|
+
# Defaults to "Adam".
|
24
|
+
def initialize(learning_rate = 0.001, beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8,
|
10
25
|
use_locking: false, name: "Adam")
|
11
26
|
@learning_rate = learning_rate
|
12
27
|
@beta1 = beta1
|
@@ -8,13 +8,19 @@ module TensorStream
|
|
8
8
|
|
9
9
|
def initialize(learning_rate, use_locking: false, name: "GradientDescent")
|
10
10
|
@learning_rate = learning_rate
|
11
|
+
@learning_rate_tensor = nil
|
11
12
|
super(name: name, use_locking: use_locking)
|
12
13
|
end
|
13
14
|
|
14
15
|
protected
|
15
16
|
|
17
|
+
def prepare
|
18
|
+
learning_rate = call_if_callable(@learning_rate)
|
19
|
+
@learning_rate_tensor = convert_to_tensor(learning_rate, name: "learning_rate")
|
20
|
+
end
|
21
|
+
|
16
22
|
def apply_dense(grad, var)
|
17
|
-
i_op(:apply_gradient_descent, var, TensorStream.cast(@
|
23
|
+
i_op(:apply_gradient_descent, var, TensorStream.cast(@learning_rate_tensor, grad.data_type), grad)
|
18
24
|
end
|
19
25
|
end
|
20
26
|
end
|
@@ -3,6 +3,7 @@ require 'tensor_stream/train/optimizer'
|
|
3
3
|
require 'tensor_stream/train/gradient_descent_optimizer'
|
4
4
|
require 'tensor_stream/train/momentum_optimizer'
|
5
5
|
require 'tensor_stream/train/adam_optimizer'
|
6
|
+
require 'tensor_stream/train/adadelta_optimizer'
|
6
7
|
require 'tensor_stream/train/saver'
|
7
8
|
|
8
9
|
module TensorStream
|
data/lib/tensor_stream/types.rb
CHANGED
data/lib/tensor_stream/utils.rb
CHANGED
@@ -11,6 +11,7 @@ module TensorStream
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def get_variable(name, dtype: nil, shape: nil, initializer: nil, trainable: true, collections: nil, validate_shape: false)
|
14
|
+
raise TensorStream::ValueError, "validate_shape=true and initializer does not have a defined shape" if validate_shape && !shape.nil && initializer.is_a?(Tensor)
|
14
15
|
TensorStream::Variable.new(dtype || :float32, nil, shape, self, collections: collections, name: name, initializer: initializer, trainable: trainable)
|
15
16
|
end
|
16
17
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Linear Regression sample, using SGD and auto-differentiation
|
2
|
-
|
2
|
+
require "bundler/setup"
|
3
3
|
require 'tensor_stream'
|
4
4
|
|
5
5
|
tf = TensorStream # use tf to make it look like TensorFlow
|
@@ -20,6 +20,7 @@ X = tf.placeholder("float")
|
|
20
20
|
Y = tf.placeholder("float")
|
21
21
|
|
22
22
|
# Set model weights
|
23
|
+
|
23
24
|
W = tf.variable(rand, name: "weight")
|
24
25
|
b = tf.variable(rand, name: "bias")
|
25
26
|
|
@@ -32,8 +33,10 @@ cost = ((pred - Y) ** 2).reduce(:+) / ( 2 * n_samples)
|
|
32
33
|
# Other possible Optimizers
|
33
34
|
# optimizer = TensorStream::Train::MomentumOptimizer.new(learning_rate, momentum, use_nesterov: true).minimize(cost)
|
34
35
|
# optimizer = TensorStream::Train::AdamOptimizer.new(learning_rate).minimize(cost)
|
36
|
+
# optimizer = TensorStream::Train::AdadeltaOptimizer.new(1.0).minimize(cost)
|
35
37
|
optimizer = TensorStream::Train::GradientDescentOptimizer.new(learning_rate).minimize(cost)
|
36
38
|
|
39
|
+
|
37
40
|
# Initialize the variables (i.e. assign their default value)
|
38
41
|
init = tf.global_variables_initializer()
|
39
42
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# A ruby port of the example code discussed by Martin Gorner in
|
2
|
+
# "TensorFlow and Deep Learning without a PhD, Part 1 (Google Cloud Next '17)""
|
3
|
+
#
|
4
|
+
# https://www.youtube.com/watch?v=u4alGiomYP4
|
5
|
+
#
|
6
|
+
# Requirements:
|
7
|
+
# mnist-learn gem
|
8
|
+
# opencl_ruby_ffi gem
|
9
|
+
require "bundler/setup"
|
10
|
+
require 'tensor_stream'
|
11
|
+
require 'mnist-learn'
|
12
|
+
|
13
|
+
# Enable OpenCL hardware accelerated computation, not using OpenCL can be very slow
|
14
|
+
require 'tensor_stream/evaluator/opencl/opencl_evaluator'
|
15
|
+
|
16
|
+
tf = TensorStream
|
17
|
+
|
18
|
+
# Import MNIST data
|
19
|
+
puts "downloading minst data"
|
20
|
+
mnist = Mnist.read_data_sets('/tmp/data', one_hot: true)
|
21
|
+
puts "downloading finished"
|
22
|
+
|
23
|
+
x = tf.placeholder(:float32, shape: [nil, 28, 28, 1])
|
24
|
+
w = tf.variable(tf.zeros([784, 10]))
|
25
|
+
b = tf.variable(tf.zeros([10]))
|
26
|
+
|
27
|
+
init = tf.global_variables_initializer
|
28
|
+
|
29
|
+
# model
|
30
|
+
y = tf.nn.softmax(tf.matmul(tf.reshape(x, [-1, 784]), w) + b)
|
31
|
+
|
32
|
+
y_ = tf.placeholder(:float32, shape: [nil, 10])
|
33
|
+
|
34
|
+
# loss function
|
35
|
+
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
|
36
|
+
|
37
|
+
is_correct = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
|
38
|
+
accuracy = tf.reduce_mean(tf.cast(is_correct, :float32))
|
39
|
+
|
40
|
+
optimizer = TensorStream::Train::GradientDescentOptimizer.new(0.01)
|
41
|
+
train_step = optimizer.minimize(cross_entropy)
|
42
|
+
|
43
|
+
sess = tf.session
|
44
|
+
sess.run(init)
|
45
|
+
|
46
|
+
(0...1000).each do |i|
|
47
|
+
# load batch of images and correct answers
|
48
|
+
batch_x, batch_y = mnist.train.next_batch(100)
|
49
|
+
train_data = { x => batch_x, y_ => batch_y }
|
50
|
+
|
51
|
+
# train
|
52
|
+
sess.run(train_step, feed_dict: train_data)
|
53
|
+
if (i % 10 == 0)
|
54
|
+
# success? add code to print it
|
55
|
+
a, c = sess.run([accuracy, cross_entropy], feed_dict: train_data)
|
56
|
+
puts "#{i} train accuracy #{a}, error #{c}"
|
57
|
+
|
58
|
+
# success on test data?
|
59
|
+
test_data = { x => mnist.test.images, y_ => mnist.test.labels }
|
60
|
+
a, c = sess.run([accuracy, cross_entropy], feed_dict: test_data)
|
61
|
+
puts " test accuracy #{a}, error #{c}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
data/samples/nearest_neighbor.rb
CHANGED
@@ -8,10 +8,9 @@ Project: https://github.com/aymericdamien/TensorFlow-Examples/
|
|
8
8
|
|
9
9
|
Make sure to install the mnist-learn gem !!
|
10
10
|
'''
|
11
|
-
|
11
|
+
require "bundler/setup"
|
12
12
|
require 'tensor_stream'
|
13
13
|
require 'mnist-learn'
|
14
|
-
require 'tensor_stream/evaluator/opencl/opencl_evaluator'
|
15
14
|
|
16
15
|
tf = TensorStream
|
17
16
|
|
@@ -12,9 +12,9 @@ Project: https://github.com/aymericdamien/TensorFlow-Examples/
|
|
12
12
|
|
13
13
|
The mnist-learn gem is required as well as an OpenCL compatible device with drivers correctly installed
|
14
14
|
"""
|
15
|
+
require "bundler/setup"
|
15
16
|
require 'tensor_stream'
|
16
17
|
require 'mnist-learn'
|
17
|
-
require 'tensor_stream/evaluator/opencl/opencl_evaluator'
|
18
18
|
|
19
19
|
tf = TensorStream
|
20
20
|
# Import MNIST data
|
data/tensor_stream.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tensor_stream
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
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: 2018-
|
11
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -206,6 +206,20 @@ dependencies:
|
|
206
206
|
- - ">="
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: chunky_png
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
209
223
|
description: A reimplementation of TensorFlow for ruby. This is a ground up implementation
|
210
224
|
with no dependency on TensorFlow. Effort has been made to make the programming style
|
211
225
|
as near to TensorFlow as possible, comes with a pure ruby evaluator by default as
|
@@ -243,65 +257,14 @@ files:
|
|
243
257
|
- lib/tensor_stream/evaluator/base_evaluator.rb
|
244
258
|
- lib/tensor_stream/evaluator/buffer.rb
|
245
259
|
- lib/tensor_stream/evaluator/evaluator.rb
|
246
|
-
- lib/tensor_stream/evaluator/opencl/kernels/_bool_operand.cl
|
247
|
-
- lib/tensor_stream/evaluator/opencl/kernels/_operand.cl
|
248
|
-
- lib/tensor_stream/evaluator/opencl/kernels/abs.cl
|
249
|
-
- lib/tensor_stream/evaluator/opencl/kernels/acos.cl
|
250
|
-
- lib/tensor_stream/evaluator/opencl/kernels/add.cl
|
251
|
-
- lib/tensor_stream/evaluator/opencl/kernels/apply_adam.cl
|
252
|
-
- lib/tensor_stream/evaluator/opencl/kernels/apply_gradient.cl
|
253
|
-
- lib/tensor_stream/evaluator/opencl/kernels/apply_momentum.cl
|
254
|
-
- lib/tensor_stream/evaluator/opencl/kernels/argmax.cl
|
255
|
-
- lib/tensor_stream/evaluator/opencl/kernels/argmin.cl
|
256
|
-
- lib/tensor_stream/evaluator/opencl/kernels/asin.cl
|
257
|
-
- lib/tensor_stream/evaluator/opencl/kernels/cast.cl
|
258
|
-
- lib/tensor_stream/evaluator/opencl/kernels/ceil.cl
|
259
|
-
- lib/tensor_stream/evaluator/opencl/kernels/cond.cl.erb
|
260
|
-
- lib/tensor_stream/evaluator/opencl/kernels/cos.cl
|
261
|
-
- lib/tensor_stream/evaluator/opencl/kernels/div.cl.erb
|
262
|
-
- lib/tensor_stream/evaluator/opencl/kernels/exp.cl
|
263
|
-
- lib/tensor_stream/evaluator/opencl/kernels/floor.cl
|
264
|
-
- lib/tensor_stream/evaluator/opencl/kernels/floor_div.cl
|
265
|
-
- lib/tensor_stream/evaluator/opencl/kernels/floor_mod.cl
|
266
|
-
- lib/tensor_stream/evaluator/opencl/kernels/gemm.cl
|
267
|
-
- lib/tensor_stream/evaluator/opencl/kernels/log.cl
|
268
|
-
- lib/tensor_stream/evaluator/opencl/kernels/log1p.cl
|
269
|
-
- lib/tensor_stream/evaluator/opencl/kernels/log_softmax.cl
|
270
|
-
- lib/tensor_stream/evaluator/opencl/kernels/max.cl
|
271
|
-
- lib/tensor_stream/evaluator/opencl/kernels/min.cl
|
272
|
-
- lib/tensor_stream/evaluator/opencl/kernels/mod.cl
|
273
|
-
- lib/tensor_stream/evaluator/opencl/kernels/mul.cl
|
274
|
-
- lib/tensor_stream/evaluator/opencl/kernels/negate.cl
|
275
|
-
- lib/tensor_stream/evaluator/opencl/kernels/pack.cl
|
276
|
-
- lib/tensor_stream/evaluator/opencl/kernels/pow.cl
|
277
|
-
- lib/tensor_stream/evaluator/opencl/kernels/real_div.cl
|
278
|
-
- lib/tensor_stream/evaluator/opencl/kernels/reciprocal.cl
|
279
|
-
- lib/tensor_stream/evaluator/opencl/kernels/round.cl
|
280
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sigmoid.cl
|
281
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sigmoid_grad.cl
|
282
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sign.cl
|
283
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sin.cl
|
284
|
-
- lib/tensor_stream/evaluator/opencl/kernels/softmax.cl
|
285
|
-
- lib/tensor_stream/evaluator/opencl/kernels/softmax_cross.cl
|
286
|
-
- lib/tensor_stream/evaluator/opencl/kernels/softmax_cross_grad.cl
|
287
|
-
- lib/tensor_stream/evaluator/opencl/kernels/softmax_grad.cl
|
288
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sqrt.cl
|
289
|
-
- lib/tensor_stream/evaluator/opencl/kernels/square.cl
|
290
|
-
- lib/tensor_stream/evaluator/opencl/kernels/squared_difference.cl
|
291
|
-
- lib/tensor_stream/evaluator/opencl/kernels/sub.cl
|
292
|
-
- lib/tensor_stream/evaluator/opencl/kernels/tan.cl
|
293
|
-
- lib/tensor_stream/evaluator/opencl/kernels/tanh.cl
|
294
|
-
- lib/tensor_stream/evaluator/opencl/kernels/tanh_grad.cl
|
295
|
-
- lib/tensor_stream/evaluator/opencl/kernels/where.cl
|
296
|
-
- lib/tensor_stream/evaluator/opencl/opencl_buffer.rb
|
297
|
-
- lib/tensor_stream/evaluator/opencl/opencl_device.rb
|
298
|
-
- lib/tensor_stream/evaluator/opencl/opencl_evaluator.rb
|
299
|
-
- lib/tensor_stream/evaluator/opencl/opencl_template_helper.rb
|
300
260
|
- lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb
|
301
261
|
- lib/tensor_stream/evaluator/operation_helpers/math_helper.rb
|
302
262
|
- lib/tensor_stream/evaluator/operation_helpers/random_gaussian.rb
|
263
|
+
- lib/tensor_stream/evaluator/ruby/array_ops.rb
|
264
|
+
- lib/tensor_stream/evaluator/ruby/images_ops.rb
|
303
265
|
- lib/tensor_stream/evaluator/ruby/math_ops.rb
|
304
266
|
- lib/tensor_stream/evaluator/ruby/nn_ops.rb
|
267
|
+
- lib/tensor_stream/evaluator/ruby/random_ops.rb
|
305
268
|
- lib/tensor_stream/evaluator/ruby_evaluator.rb
|
306
269
|
- lib/tensor_stream/exceptions.rb
|
307
270
|
- lib/tensor_stream/graph.rb
|
@@ -313,6 +276,7 @@ files:
|
|
313
276
|
- lib/tensor_stream/graph_serializers/serializer.rb
|
314
277
|
- lib/tensor_stream/helpers/op_helper.rb
|
315
278
|
- lib/tensor_stream/helpers/string_helper.rb
|
279
|
+
- lib/tensor_stream/images.rb
|
316
280
|
- lib/tensor_stream/initializer.rb
|
317
281
|
- lib/tensor_stream/math_gradients.rb
|
318
282
|
- lib/tensor_stream/monkey_patches/integer.rb
|
@@ -323,6 +287,7 @@ files:
|
|
323
287
|
- lib/tensor_stream/session.rb
|
324
288
|
- lib/tensor_stream/tensor.rb
|
325
289
|
- lib/tensor_stream/tensor_shape.rb
|
290
|
+
- lib/tensor_stream/train/adadelta_optimizer.rb
|
326
291
|
- lib/tensor_stream/train/adam_optimizer.rb
|
327
292
|
- lib/tensor_stream/train/gradient_descent_optimizer.rb
|
328
293
|
- lib/tensor_stream/train/momentum_optimizer.rb
|
@@ -342,6 +307,7 @@ files:
|
|
342
307
|
- samples/iris.rb
|
343
308
|
- samples/linear_regression.rb
|
344
309
|
- samples/logistic_regression.rb
|
310
|
+
- samples/mnist_data.rb
|
345
311
|
- samples/multigpu.rb
|
346
312
|
- samples/nearest_neighbor.rb
|
347
313
|
- samples/raw_neural_net_sample.rb
|
@@ -367,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
367
333
|
version: '0'
|
368
334
|
requirements: []
|
369
335
|
rubyforge_project:
|
370
|
-
rubygems_version:
|
336
|
+
rubygems_version: 3.0.0.beta1
|
371
337
|
signing_key:
|
372
338
|
specification_version: 4
|
373
339
|
summary: A Pure ruby tensorflow implementation
|