tensor_stream 1.0.0 → 1.0.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -0
- data/Gemfile +1 -1
- data/LICENSE.txt +1 -1
- data/README.md +34 -34
- data/Rakefile +3 -3
- data/USAGE_GUIDE.md +235 -0
- data/bin/stubgen +20 -0
- data/exe/model_utils +2 -2
- data/lib/tensor_stream.rb +45 -44
- data/lib/tensor_stream/constant.rb +2 -2
- data/lib/tensor_stream/control_flow.rb +1 -1
- data/lib/tensor_stream/debugging/debugging.rb +2 -2
- data/lib/tensor_stream/dynamic_stitch.rb +2 -2
- data/lib/tensor_stream/evaluator/base_evaluator.rb +18 -18
- data/lib/tensor_stream/evaluator/buffer.rb +1 -1
- data/lib/tensor_stream/evaluator/evaluator.rb +2 -2
- data/lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb +41 -41
- data/lib/tensor_stream/evaluator/operation_helpers/math_helper.rb +1 -1
- data/lib/tensor_stream/evaluator/ruby/array_ops.rb +39 -39
- data/lib/tensor_stream/evaluator/ruby/check_ops.rb +2 -2
- data/lib/tensor_stream/evaluator/ruby/images_ops.rb +18 -18
- data/lib/tensor_stream/evaluator/ruby/math_ops.rb +13 -14
- data/lib/tensor_stream/evaluator/ruby/nn_ops.rb +33 -36
- data/lib/tensor_stream/evaluator/ruby/random_ops.rb +20 -21
- data/lib/tensor_stream/evaluator/ruby_evaluator.rb +36 -49
- data/lib/tensor_stream/exceptions.rb +1 -1
- data/lib/tensor_stream/generated_stub/ops.rb +691 -0
- data/lib/tensor_stream/generated_stub/stub_file.erb +24 -0
- data/lib/tensor_stream/graph.rb +18 -18
- data/lib/tensor_stream/graph_builder.rb +17 -17
- data/lib/tensor_stream/graph_deserializers/protobuf.rb +97 -97
- data/lib/tensor_stream/graph_deserializers/yaml_loader.rb +1 -1
- data/lib/tensor_stream/graph_keys.rb +3 -3
- data/lib/tensor_stream/graph_serializers/graphml.rb +33 -33
- data/lib/tensor_stream/graph_serializers/packer.rb +23 -23
- data/lib/tensor_stream/graph_serializers/pbtext.rb +38 -42
- data/lib/tensor_stream/graph_serializers/serializer.rb +3 -2
- data/lib/tensor_stream/graph_serializers/yaml.rb +5 -5
- data/lib/tensor_stream/helpers/infer_shape.rb +56 -56
- data/lib/tensor_stream/helpers/op_helper.rb +8 -9
- data/lib/tensor_stream/helpers/string_helper.rb +15 -15
- data/lib/tensor_stream/helpers/tensor_mixins.rb +17 -17
- data/lib/tensor_stream/images.rb +1 -1
- data/lib/tensor_stream/initializer.rb +1 -1
- data/lib/tensor_stream/math_gradients.rb +28 -187
- data/lib/tensor_stream/monkey_patches/array.rb +1 -1
- data/lib/tensor_stream/monkey_patches/float.rb +1 -1
- data/lib/tensor_stream/monkey_patches/integer.rb +1 -1
- data/lib/tensor_stream/monkey_patches/op_patch.rb +5 -5
- data/lib/tensor_stream/monkey_patches/patch.rb +1 -1
- data/lib/tensor_stream/nn/nn_ops.rb +17 -15
- data/lib/tensor_stream/op_maker.rb +180 -0
- data/lib/tensor_stream/operation.rb +17 -17
- data/lib/tensor_stream/ops.rb +95 -384
- data/lib/tensor_stream/ops/add.rb +23 -0
- data/lib/tensor_stream/ops/argmax.rb +14 -0
- data/lib/tensor_stream/ops/argmin.rb +14 -0
- data/lib/tensor_stream/ops/case.rb +17 -0
- data/lib/tensor_stream/ops/cast.rb +15 -0
- data/lib/tensor_stream/ops/ceil.rb +15 -0
- data/lib/tensor_stream/ops/const.rb +0 -0
- data/lib/tensor_stream/ops/cos.rb +10 -0
- data/lib/tensor_stream/ops/div.rb +21 -0
- data/lib/tensor_stream/ops/equal.rb +15 -0
- data/lib/tensor_stream/ops/expand_dims.rb +17 -0
- data/lib/tensor_stream/ops/fill.rb +19 -0
- data/lib/tensor_stream/ops/floor.rb +15 -0
- data/lib/tensor_stream/ops/floor_div.rb +15 -0
- data/lib/tensor_stream/ops/greater.rb +11 -0
- data/lib/tensor_stream/ops/greater_equal.rb +11 -0
- data/lib/tensor_stream/ops/less_equal.rb +15 -0
- data/lib/tensor_stream/ops/log.rb +14 -0
- data/lib/tensor_stream/ops/mat_mul.rb +60 -0
- data/lib/tensor_stream/ops/max.rb +15 -0
- data/lib/tensor_stream/ops/min.rb +15 -0
- data/lib/tensor_stream/ops/mod.rb +23 -0
- data/lib/tensor_stream/ops/mul.rb +21 -0
- data/lib/tensor_stream/ops/negate.rb +14 -0
- data/lib/tensor_stream/ops/ones_like.rb +19 -0
- data/lib/tensor_stream/ops/pow.rb +25 -0
- data/lib/tensor_stream/ops/prod.rb +60 -0
- data/lib/tensor_stream/ops/random_uniform.rb +18 -0
- data/lib/tensor_stream/ops/range.rb +20 -0
- data/lib/tensor_stream/ops/rank.rb +13 -0
- data/lib/tensor_stream/ops/reshape.rb +24 -0
- data/lib/tensor_stream/ops/round.rb +15 -0
- data/lib/tensor_stream/ops/shape.rb +14 -0
- data/lib/tensor_stream/ops/sigmoid.rb +10 -0
- data/lib/tensor_stream/ops/sign.rb +12 -0
- data/lib/tensor_stream/ops/sin.rb +10 -0
- data/lib/tensor_stream/ops/size.rb +16 -0
- data/lib/tensor_stream/ops/sub.rb +24 -0
- data/lib/tensor_stream/ops/sum.rb +27 -0
- data/lib/tensor_stream/ops/tan.rb +12 -0
- data/lib/tensor_stream/ops/tanh.rb +10 -0
- data/lib/tensor_stream/ops/tile.rb +19 -0
- data/lib/tensor_stream/ops/zeros.rb +15 -0
- data/lib/tensor_stream/placeholder.rb +2 -2
- data/lib/tensor_stream/profile/report_tool.rb +3 -3
- data/lib/tensor_stream/session.rb +36 -38
- data/lib/tensor_stream/tensor.rb +2 -2
- data/lib/tensor_stream/tensor_shape.rb +4 -4
- data/lib/tensor_stream/train/adadelta_optimizer.rb +8 -8
- data/lib/tensor_stream/train/adagrad_optimizer.rb +3 -3
- data/lib/tensor_stream/train/adam_optimizer.rb +11 -11
- data/lib/tensor_stream/train/learning_rate_decay.rb +2 -2
- data/lib/tensor_stream/train/momentum_optimizer.rb +7 -7
- data/lib/tensor_stream/train/optimizer.rb +9 -9
- data/lib/tensor_stream/train/rmsprop_optimizer.rb +16 -16
- data/lib/tensor_stream/train/saver.rb +14 -14
- data/lib/tensor_stream/train/slot_creator.rb +6 -6
- data/lib/tensor_stream/train/utils.rb +12 -12
- data/lib/tensor_stream/trainer.rb +10 -10
- data/lib/tensor_stream/types.rb +1 -1
- data/lib/tensor_stream/utils.rb +33 -32
- data/lib/tensor_stream/utils/freezer.rb +5 -5
- data/lib/tensor_stream/variable.rb +5 -5
- data/lib/tensor_stream/variable_scope.rb +1 -1
- data/lib/tensor_stream/version.rb +1 -1
- data/samples/{iris.data → datasets/iris.data} +0 -0
- data/samples/jupyter_notebooks/linear_regression.ipynb +463 -0
- data/samples/{iris.rb → neural_networks/iris.rb} +21 -23
- data/samples/{mnist_data.rb → neural_networks/mnist_data.rb} +8 -8
- data/samples/neural_networks/raw_neural_net_sample.rb +112 -0
- data/samples/{rnn.rb → neural_networks/rnn.rb} +28 -31
- data/samples/{nearest_neighbor.rb → others/nearest_neighbor.rb} +12 -12
- data/samples/regression/linear_regression.rb +63 -0
- data/samples/{logistic_regression.rb → regression/logistic_regression.rb} +14 -16
- data/tensor_stream.gemspec +9 -8
- metadata +89 -19
- data/data_1.json +0 -4764
- data/data_2.json +0 -4764
- data/data_actual.json +0 -28
- data/data_expected.json +0 -28
- data/data_input.json +0 -28
- data/samples/error.graphml +0 -2755
- data/samples/gradient_sample.graphml +0 -1255
- data/samples/linear_regression.rb +0 -69
- data/samples/multigpu.rb +0 -73
- data/samples/raw_neural_net_sample.rb +0 -112
@@ -1,69 +0,0 @@
|
|
1
|
-
# Linear Regression sample, using SGD and auto-differentiation
|
2
|
-
require "bundler/setup"
|
3
|
-
require 'tensor_stream'
|
4
|
-
|
5
|
-
tf = TensorStream # use tf to make it look like TensorFlow
|
6
|
-
|
7
|
-
learning_rate = 0.01
|
8
|
-
momentum = 0.5
|
9
|
-
training_epochs = 10000
|
10
|
-
display_step = 50
|
11
|
-
|
12
|
-
train_X = [3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,
|
13
|
-
7.042,10.791,5.313,7.997,5.654,9.27,3.1]
|
14
|
-
train_Y = [1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,
|
15
|
-
2.827,3.465,1.65,2.904,2.42,2.94,1.3]
|
16
|
-
|
17
|
-
n_samples = train_X.size
|
18
|
-
|
19
|
-
X = Float.placeholder
|
20
|
-
Y = Float.placeholder
|
21
|
-
|
22
|
-
# Set model weights
|
23
|
-
|
24
|
-
W = rand.t.var name: "weight"
|
25
|
-
b = rand.t.var name: "bias"
|
26
|
-
|
27
|
-
# Construct a linear model
|
28
|
-
pred = X * W + b
|
29
|
-
|
30
|
-
# Mean squared error
|
31
|
-
cost = ((pred - Y) ** 2).reduce / ( 2 * n_samples)
|
32
|
-
|
33
|
-
# Other possible Optimizers
|
34
|
-
|
35
|
-
# optimizer = TensorStream::Train::MomentumOptimizer.new(learning_rate, momentum, use_nesterov: true).minimize(cost)
|
36
|
-
# optimizer = TensorStream::Train::AdamOptimizer.new(learning_rate).minimize(cost)
|
37
|
-
# optimizer = TensorStream::Train::AdadeltaOptimizer.new(1.0).minimize(cost)
|
38
|
-
# optimizer = TensorStream::Train::AdagradOptimizer.new(0.01).minimize(cost)
|
39
|
-
# optimizer = TensorStream::Train::RMSPropOptimizer.new(0.01, centered: true).minimize(cost)
|
40
|
-
optimizer = TensorStream::Train::GradientDescentOptimizer.new(learning_rate).minimize(cost)
|
41
|
-
|
42
|
-
|
43
|
-
# Initialize the variables (i.e. assign their default value)
|
44
|
-
init = tf.global_variables_initializer()
|
45
|
-
# Add ops to save and restore all the variables.
|
46
|
-
saver = tf::Train::Saver.new
|
47
|
-
|
48
|
-
tf.session do |sess|
|
49
|
-
start_time = Time.now
|
50
|
-
sess.run(init)
|
51
|
-
(0..training_epochs).each do |epoch|
|
52
|
-
train_X.zip(train_Y).each do |x,y|
|
53
|
-
sess.run(optimizer, feed_dict: {X => x, Y => y})
|
54
|
-
end
|
55
|
-
|
56
|
-
if (epoch+1) % display_step == 0
|
57
|
-
# Save the variables to disk.
|
58
|
-
save_path = saver.save(sess, "/tmp/lg_model")
|
59
|
-
c = sess.run(cost, feed_dict: {X => train_X, Y => train_Y})
|
60
|
-
puts("Epoch:", '%04d' % (epoch+1), "cost=", c, \
|
61
|
-
"W=", sess.run(W), "b=", sess.run(b))
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
puts("Optimization Finished!")
|
66
|
-
training_cost = sess.run(cost, feed_dict: { X => train_X, Y => train_Y})
|
67
|
-
puts("Training cost=", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n')
|
68
|
-
puts("time elapsed ", Time.now.to_i - start_time.to_i)
|
69
|
-
end
|
data/samples/multigpu.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require "bundler/setup"
|
2
|
-
require 'tensor_stream'
|
3
|
-
require 'tensor_stream/evaluator/opencl/opencl_evaluator'
|
4
|
-
# require 'pry-byebug'
|
5
|
-
|
6
|
-
ts = TensorStream
|
7
|
-
|
8
|
-
n = 10
|
9
|
-
DIMEN = 1024
|
10
|
-
|
11
|
-
A = ts.random_uniform([DIMEN, DIMEN]).eval
|
12
|
-
B = ts.random_uniform([DIMEN, DIMEN]).eval
|
13
|
-
|
14
|
-
|
15
|
-
# Create a graph to store results
|
16
|
-
c1 = []
|
17
|
-
c2 = []
|
18
|
-
a = nil
|
19
|
-
b = nil
|
20
|
-
|
21
|
-
def matpow(m, n)
|
22
|
-
return m if n < 1
|
23
|
-
TensorStream.matmul(m, matpow(m, n-1))
|
24
|
-
end
|
25
|
-
|
26
|
-
ts.device('/device:GPU:0') do
|
27
|
-
a = ts.placeholder(:float32, shape: [DIMEN, DIMEN])
|
28
|
-
b = ts.placeholder(:float32, shape: [DIMEN, DIMEN])
|
29
|
-
# Compute A^n and B^n and store results in c1
|
30
|
-
c1 << matpow(a, n)
|
31
|
-
c1 << matpow(b, n)
|
32
|
-
end
|
33
|
-
|
34
|
-
sum = ts.device('/device:GPU:0') do
|
35
|
-
ts.add_n(c1)
|
36
|
-
end
|
37
|
-
|
38
|
-
t1_1 = Time.now.to_i
|
39
|
-
t2_1 = nil
|
40
|
-
|
41
|
-
ts.session(log_device_placement: true) do |sess|
|
42
|
-
sess.run(sum, feed_dict: { a => A, b => B})
|
43
|
-
t2_1 = Time.now.to_i
|
44
|
-
end
|
45
|
-
|
46
|
-
# Multi GPU computing
|
47
|
-
# GPU:0 computes A^n
|
48
|
-
ts.device('/device:GPU:1') do
|
49
|
-
a = ts.placeholder(:float32, shape: [DIMEN, DIMEN])
|
50
|
-
c2 << matpow(a, n)
|
51
|
-
end
|
52
|
-
|
53
|
-
# GPU:1 computes B^n
|
54
|
-
ts.device('/device:GPU:1') do
|
55
|
-
b = ts.placeholder(:float32, shape: [DIMEN, DIMEN])
|
56
|
-
c2 << matpow(b, n)
|
57
|
-
end
|
58
|
-
|
59
|
-
ts.device('/device:GPU:1') do
|
60
|
-
sum = ts.add_n(c2) #Addition of all elements in c2, i.e. A^n + B^n
|
61
|
-
end
|
62
|
-
|
63
|
-
t1_2 = Time.now.to_i
|
64
|
-
t2_2 = nil
|
65
|
-
ts.session(log_device_placement:true) do |sess|
|
66
|
-
# Run the op.
|
67
|
-
sess.run(sum, feed_dict: {a => A, b => B})
|
68
|
-
t2_2 = Time.now.to_i
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
print("Single GPU computation time: " + (t2_1-t1_1).to_s)
|
73
|
-
print("Multi GPU computation time: " + (t2_2-t1_2).to_s)
|
@@ -1,112 +0,0 @@
|
|
1
|
-
""" Neural Network.
|
2
|
-
|
3
|
-
A 2-Hidden Layers Fully Connected Neural Network (a.k.a Multilayer Perceptron)
|
4
|
-
implementation with TensorFlow. This example is using the MNIST database
|
5
|
-
of handwritten digits (http://yann.lecun.com/exdb/mnist/).
|
6
|
-
|
7
|
-
Links:
|
8
|
-
[MNIST Dataset](http://yann.lecun.com/exdb/mnist/).
|
9
|
-
|
10
|
-
Author: Aymeric Damien
|
11
|
-
Project: https://github.com/aymericdamien/TensorFlow-Examples/
|
12
|
-
|
13
|
-
The mnist-learn gem is required as well as an OpenCL compatible device with drivers correctly installed
|
14
|
-
"""
|
15
|
-
require "bundler/setup"
|
16
|
-
require 'tensor_stream'
|
17
|
-
require 'mnist-learn'
|
18
|
-
|
19
|
-
tf = TensorStream
|
20
|
-
# Import MNIST data
|
21
|
-
puts "downloading minst data"
|
22
|
-
mnist = Mnist.read_data_sets('/tmp/data', one_hot: true)
|
23
|
-
puts "downloading finished"
|
24
|
-
|
25
|
-
# Parameters
|
26
|
-
learning_rate = 0.001
|
27
|
-
momentum = 0.01
|
28
|
-
num_steps = 100
|
29
|
-
batch_size = 128
|
30
|
-
display_step = 5
|
31
|
-
|
32
|
-
# Network Parameters
|
33
|
-
n_hidden_1 = 256 # 1st layer number of neurons
|
34
|
-
n_hidden_2 = 256 # 2nd layer number of neurons
|
35
|
-
num_input = 784 # MNIST data input (img shape: 28*28)
|
36
|
-
num_classes = 10 # MNIST total classes (0-9 digits)
|
37
|
-
|
38
|
-
# tf Graph input
|
39
|
-
X = tf.placeholder(:float64, shape: [nil, num_input])
|
40
|
-
Y = tf.placeholder(:float64, shape: [nil, num_classes])
|
41
|
-
|
42
|
-
# Store layers weight & bias
|
43
|
-
weights = {
|
44
|
-
'h1' => tf.variable(tf.random_normal([num_input, n_hidden_1]), dtype: :float64, name: 'h1'),
|
45
|
-
'h2' => tf.variable(tf.random_normal([n_hidden_1, n_hidden_2]), dtype: :float64, name: 'h2'),
|
46
|
-
'out' => tf.variable(tf.random_normal([n_hidden_2, num_classes]), dtype: :float64, name: 'out')
|
47
|
-
}
|
48
|
-
|
49
|
-
biases = {
|
50
|
-
'b1' => tf.variable(tf.random_normal([n_hidden_1]), dtype: :float64, name: 'b1'),
|
51
|
-
'b2' => tf.variable(tf.random_normal([n_hidden_2]), dtype: :float64, name: 'b2'),
|
52
|
-
'out' => tf.variable(tf.random_normal([num_classes]), dtype: :float64, name: 'out2')
|
53
|
-
}
|
54
|
-
|
55
|
-
|
56
|
-
# Create model
|
57
|
-
def neural_net(x, weights, biases)
|
58
|
-
tf = TensorStream
|
59
|
-
# Hidden fully connected layer with 256 neurons
|
60
|
-
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
|
61
|
-
# Hidden fully connected layer with 256 neurons
|
62
|
-
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
|
63
|
-
# Output fully connected layer with a neuron for each class
|
64
|
-
tf.matmul(layer_2, weights['out']) + biases['out']
|
65
|
-
end
|
66
|
-
|
67
|
-
# Construct model
|
68
|
-
logits = neural_net(X, weights, biases)
|
69
|
-
prediction = tf.nn.softmax(logits)
|
70
|
-
|
71
|
-
# Define loss and optimizer
|
72
|
-
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(
|
73
|
-
logits: logits, labels: Y))
|
74
|
-
|
75
|
-
optimizer = TensorStream::Train::MomentumOptimizer.new(learning_rate, momentum, use_nesterov: true)
|
76
|
-
train_op = optimizer.minimize(loss_op)
|
77
|
-
|
78
|
-
# Evaluate model
|
79
|
-
correct_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(Y, 1))
|
80
|
-
accuracy = tf.reduce_mean(tf.cast(correct_pred, :float32))
|
81
|
-
|
82
|
-
# tf.add_check_numerics_ops
|
83
|
-
|
84
|
-
# Initialize the variables (i.e. assign their default value)
|
85
|
-
init = tf.global_variables_initializer
|
86
|
-
|
87
|
-
# Start training
|
88
|
-
tf.session do |sess|
|
89
|
-
# Run the initializer
|
90
|
-
sess.run(init)
|
91
|
-
|
92
|
-
print("Testing Accuracy:", \
|
93
|
-
sess.run(accuracy, feed_dict: { X => mnist.test.images,
|
94
|
-
Y => mnist.test.labels}))
|
95
|
-
|
96
|
-
(1..num_steps+1).each do |step|
|
97
|
-
batch_x, batch_y = mnist.train.next_batch(batch_size)
|
98
|
-
# Run optimization op (backprop)
|
99
|
-
sess.run(train_op, feed_dict: { X => batch_x, Y => batch_y })
|
100
|
-
if step % display_step == 0 || step == 1
|
101
|
-
# Calculate batch loss and accuracy
|
102
|
-
loss, acc = sess.run([loss_op, accuracy], feed_dict: { X => batch_x, Y => batch_y})
|
103
|
-
print("\nStep " + step.to_s + ", Minibatch Loss= " + \
|
104
|
-
loss.to_s + ", Training Accuracy= " + \
|
105
|
-
acc.to_s)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
print("\nOptimization Finished!")
|
109
|
-
print("\nTesting Accuracy after optimization:", \
|
110
|
-
sess.run(accuracy, feed_dict: { X => mnist.test.images,
|
111
|
-
Y => mnist.test.labels}))
|
112
|
-
end
|