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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1 -0
  4. data/Gemfile +1 -1
  5. data/LICENSE.txt +1 -1
  6. data/README.md +34 -34
  7. data/Rakefile +3 -3
  8. data/USAGE_GUIDE.md +235 -0
  9. data/bin/stubgen +20 -0
  10. data/exe/model_utils +2 -2
  11. data/lib/tensor_stream.rb +45 -44
  12. data/lib/tensor_stream/constant.rb +2 -2
  13. data/lib/tensor_stream/control_flow.rb +1 -1
  14. data/lib/tensor_stream/debugging/debugging.rb +2 -2
  15. data/lib/tensor_stream/dynamic_stitch.rb +2 -2
  16. data/lib/tensor_stream/evaluator/base_evaluator.rb +18 -18
  17. data/lib/tensor_stream/evaluator/buffer.rb +1 -1
  18. data/lib/tensor_stream/evaluator/evaluator.rb +2 -2
  19. data/lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb +41 -41
  20. data/lib/tensor_stream/evaluator/operation_helpers/math_helper.rb +1 -1
  21. data/lib/tensor_stream/evaluator/ruby/array_ops.rb +39 -39
  22. data/lib/tensor_stream/evaluator/ruby/check_ops.rb +2 -2
  23. data/lib/tensor_stream/evaluator/ruby/images_ops.rb +18 -18
  24. data/lib/tensor_stream/evaluator/ruby/math_ops.rb +13 -14
  25. data/lib/tensor_stream/evaluator/ruby/nn_ops.rb +33 -36
  26. data/lib/tensor_stream/evaluator/ruby/random_ops.rb +20 -21
  27. data/lib/tensor_stream/evaluator/ruby_evaluator.rb +36 -49
  28. data/lib/tensor_stream/exceptions.rb +1 -1
  29. data/lib/tensor_stream/generated_stub/ops.rb +691 -0
  30. data/lib/tensor_stream/generated_stub/stub_file.erb +24 -0
  31. data/lib/tensor_stream/graph.rb +18 -18
  32. data/lib/tensor_stream/graph_builder.rb +17 -17
  33. data/lib/tensor_stream/graph_deserializers/protobuf.rb +97 -97
  34. data/lib/tensor_stream/graph_deserializers/yaml_loader.rb +1 -1
  35. data/lib/tensor_stream/graph_keys.rb +3 -3
  36. data/lib/tensor_stream/graph_serializers/graphml.rb +33 -33
  37. data/lib/tensor_stream/graph_serializers/packer.rb +23 -23
  38. data/lib/tensor_stream/graph_serializers/pbtext.rb +38 -42
  39. data/lib/tensor_stream/graph_serializers/serializer.rb +3 -2
  40. data/lib/tensor_stream/graph_serializers/yaml.rb +5 -5
  41. data/lib/tensor_stream/helpers/infer_shape.rb +56 -56
  42. data/lib/tensor_stream/helpers/op_helper.rb +8 -9
  43. data/lib/tensor_stream/helpers/string_helper.rb +15 -15
  44. data/lib/tensor_stream/helpers/tensor_mixins.rb +17 -17
  45. data/lib/tensor_stream/images.rb +1 -1
  46. data/lib/tensor_stream/initializer.rb +1 -1
  47. data/lib/tensor_stream/math_gradients.rb +28 -187
  48. data/lib/tensor_stream/monkey_patches/array.rb +1 -1
  49. data/lib/tensor_stream/monkey_patches/float.rb +1 -1
  50. data/lib/tensor_stream/monkey_patches/integer.rb +1 -1
  51. data/lib/tensor_stream/monkey_patches/op_patch.rb +5 -5
  52. data/lib/tensor_stream/monkey_patches/patch.rb +1 -1
  53. data/lib/tensor_stream/nn/nn_ops.rb +17 -15
  54. data/lib/tensor_stream/op_maker.rb +180 -0
  55. data/lib/tensor_stream/operation.rb +17 -17
  56. data/lib/tensor_stream/ops.rb +95 -384
  57. data/lib/tensor_stream/ops/add.rb +23 -0
  58. data/lib/tensor_stream/ops/argmax.rb +14 -0
  59. data/lib/tensor_stream/ops/argmin.rb +14 -0
  60. data/lib/tensor_stream/ops/case.rb +17 -0
  61. data/lib/tensor_stream/ops/cast.rb +15 -0
  62. data/lib/tensor_stream/ops/ceil.rb +15 -0
  63. data/lib/tensor_stream/ops/const.rb +0 -0
  64. data/lib/tensor_stream/ops/cos.rb +10 -0
  65. data/lib/tensor_stream/ops/div.rb +21 -0
  66. data/lib/tensor_stream/ops/equal.rb +15 -0
  67. data/lib/tensor_stream/ops/expand_dims.rb +17 -0
  68. data/lib/tensor_stream/ops/fill.rb +19 -0
  69. data/lib/tensor_stream/ops/floor.rb +15 -0
  70. data/lib/tensor_stream/ops/floor_div.rb +15 -0
  71. data/lib/tensor_stream/ops/greater.rb +11 -0
  72. data/lib/tensor_stream/ops/greater_equal.rb +11 -0
  73. data/lib/tensor_stream/ops/less_equal.rb +15 -0
  74. data/lib/tensor_stream/ops/log.rb +14 -0
  75. data/lib/tensor_stream/ops/mat_mul.rb +60 -0
  76. data/lib/tensor_stream/ops/max.rb +15 -0
  77. data/lib/tensor_stream/ops/min.rb +15 -0
  78. data/lib/tensor_stream/ops/mod.rb +23 -0
  79. data/lib/tensor_stream/ops/mul.rb +21 -0
  80. data/lib/tensor_stream/ops/negate.rb +14 -0
  81. data/lib/tensor_stream/ops/ones_like.rb +19 -0
  82. data/lib/tensor_stream/ops/pow.rb +25 -0
  83. data/lib/tensor_stream/ops/prod.rb +60 -0
  84. data/lib/tensor_stream/ops/random_uniform.rb +18 -0
  85. data/lib/tensor_stream/ops/range.rb +20 -0
  86. data/lib/tensor_stream/ops/rank.rb +13 -0
  87. data/lib/tensor_stream/ops/reshape.rb +24 -0
  88. data/lib/tensor_stream/ops/round.rb +15 -0
  89. data/lib/tensor_stream/ops/shape.rb +14 -0
  90. data/lib/tensor_stream/ops/sigmoid.rb +10 -0
  91. data/lib/tensor_stream/ops/sign.rb +12 -0
  92. data/lib/tensor_stream/ops/sin.rb +10 -0
  93. data/lib/tensor_stream/ops/size.rb +16 -0
  94. data/lib/tensor_stream/ops/sub.rb +24 -0
  95. data/lib/tensor_stream/ops/sum.rb +27 -0
  96. data/lib/tensor_stream/ops/tan.rb +12 -0
  97. data/lib/tensor_stream/ops/tanh.rb +10 -0
  98. data/lib/tensor_stream/ops/tile.rb +19 -0
  99. data/lib/tensor_stream/ops/zeros.rb +15 -0
  100. data/lib/tensor_stream/placeholder.rb +2 -2
  101. data/lib/tensor_stream/profile/report_tool.rb +3 -3
  102. data/lib/tensor_stream/session.rb +36 -38
  103. data/lib/tensor_stream/tensor.rb +2 -2
  104. data/lib/tensor_stream/tensor_shape.rb +4 -4
  105. data/lib/tensor_stream/train/adadelta_optimizer.rb +8 -8
  106. data/lib/tensor_stream/train/adagrad_optimizer.rb +3 -3
  107. data/lib/tensor_stream/train/adam_optimizer.rb +11 -11
  108. data/lib/tensor_stream/train/learning_rate_decay.rb +2 -2
  109. data/lib/tensor_stream/train/momentum_optimizer.rb +7 -7
  110. data/lib/tensor_stream/train/optimizer.rb +9 -9
  111. data/lib/tensor_stream/train/rmsprop_optimizer.rb +16 -16
  112. data/lib/tensor_stream/train/saver.rb +14 -14
  113. data/lib/tensor_stream/train/slot_creator.rb +6 -6
  114. data/lib/tensor_stream/train/utils.rb +12 -12
  115. data/lib/tensor_stream/trainer.rb +10 -10
  116. data/lib/tensor_stream/types.rb +1 -1
  117. data/lib/tensor_stream/utils.rb +33 -32
  118. data/lib/tensor_stream/utils/freezer.rb +5 -5
  119. data/lib/tensor_stream/variable.rb +5 -5
  120. data/lib/tensor_stream/variable_scope.rb +1 -1
  121. data/lib/tensor_stream/version.rb +1 -1
  122. data/samples/{iris.data → datasets/iris.data} +0 -0
  123. data/samples/jupyter_notebooks/linear_regression.ipynb +463 -0
  124. data/samples/{iris.rb → neural_networks/iris.rb} +21 -23
  125. data/samples/{mnist_data.rb → neural_networks/mnist_data.rb} +8 -8
  126. data/samples/neural_networks/raw_neural_net_sample.rb +112 -0
  127. data/samples/{rnn.rb → neural_networks/rnn.rb} +28 -31
  128. data/samples/{nearest_neighbor.rb → others/nearest_neighbor.rb} +12 -12
  129. data/samples/regression/linear_regression.rb +63 -0
  130. data/samples/{logistic_regression.rb → regression/logistic_regression.rb} +14 -16
  131. data/tensor_stream.gemspec +9 -8
  132. metadata +89 -19
  133. data/data_1.json +0 -4764
  134. data/data_2.json +0 -4764
  135. data/data_actual.json +0 -28
  136. data/data_expected.json +0 -28
  137. data/data_input.json +0 -28
  138. data/samples/error.graphml +0 -2755
  139. data/samples/gradient_sample.graphml +0 -1255
  140. data/samples/linear_regression.rb +0 -69
  141. data/samples/multigpu.rb +0 -73
  142. data/samples/raw_neural_net_sample.rb +0 -112
@@ -1,34 +1,34 @@
1
1
  require "bundler/setup"
2
- require 'tensor_stream'
3
- # require 'tensor_stream/evaluator/opencl/opencl_evaluator'
2
+ require "tensor_stream"
3
+ # require 'tensor_stream/opencl'
4
4
 
5
5
  # This neural network will predict the species of an iris based on sepal and petal size
6
6
  # Dataset: http://en.wikipedia.org/wiki/Iris_flower_data_set
7
7
  tf = TensorStream
8
- rows = File.readlines(File.join("samples","iris.data")).map {|l| l.chomp.split(',') }
8
+ rows = File.readlines("samples/datasets/iris.data").map {|l| l.chomp.split(",") }
9
9
 
10
10
  rows.shuffle!
11
11
 
12
12
  label_encodings = {
13
- 'Iris-setosa' => [1, 0, 0],
14
- 'Iris-versicolor' => [0, 1, 0],
15
- 'Iris-virginica' => [0, 0, 1]
13
+ "Iris-setosa" => [1, 0, 0],
14
+ "Iris-versicolor" => [0, 1, 0],
15
+ "Iris-virginica" => [0, 0, 1],
16
16
  }
17
17
 
18
- x_data = rows.map {|row| row[0,4].map(&:to_f) }
18
+ x_data = rows.map {|row| row[0, 4].map(&:to_f) }
19
19
  y_data = rows.map {|row| label_encodings[row[4]] }
20
20
 
21
21
  # Normalize data values before feeding into network
22
- normalize = -> (val, high, low) { (val - low) / (high - low) } # maps input to float between 0 and 1
22
+ normalize = ->(val, high, low) { (val - low) / (high - low) } # maps input to float between 0 and 1
23
23
 
24
- columns = (0..3).map do |i|
24
+ columns = (0..3).map { |i|
25
25
  x_data.map {|row| row[i] }
26
- end
26
+ }
27
27
 
28
28
  x_data.map! do |row|
29
29
  row.map.with_index do |val, j|
30
30
  max, min = columns[j].max, columns[j].min
31
- normalize.(val, max, min)
31
+ normalize.call(val, max, min)
32
32
  end
33
33
  end
34
34
 
@@ -45,11 +45,9 @@ end
45
45
 
46
46
  validation_cases = []
47
47
  x_test.each_with_index do |x, index|
48
- validation_cases << [x, y_test[index] ]
48
+ validation_cases << [x, y_test[index]]
49
49
  end
50
50
 
51
-
52
-
53
51
  def init_weights(shape)
54
52
  # Weight initialization
55
53
  TensorStream.random_normal(shape, stddev: 0.1).var
@@ -58,8 +56,8 @@ end
58
56
  def forwardprop(x, w_1, w_2)
59
57
  # Forward-propagation.
60
58
  # IMPORTANT: yhat is not softmax since TensorFlow's softmax_cross_entropy_with_logits() does that internally.
61
- h = TensorStream.nn.sigmoid(x.matmul w_1) # The \sigma function
62
- h.matmul w_2 # The \varphi function
59
+ h = TensorStream.nn.sigmoid(x.matmul(w_1)) # The \sigma function
60
+ h.matmul w_2 # The \varphi function
63
61
  end
64
62
 
65
63
  x_size = x_train[0].size
@@ -81,15 +79,15 @@ cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels: y, logi
81
79
 
82
80
  # updates = TensorStream::Train::GradientDescentOptimizer.new(0.01).minimize(cost)
83
81
  # updates = TensorStream::Train::MomentumOptimizer.new(0.01, 0.5, use_nesterov: true).minimize(cost)
84
- updates = TensorStream::Train::RMSPropOptimizer.new(0.01).minimize(cost)
82
+ updates = TensorStream::Train::RMSPropOptimizer.new(0.01).minimize(cost)
85
83
 
86
84
  # Run SGD
87
85
  sess = tf.session
88
86
  init = tf.global_variables_initializer
89
87
  sess.run(init)
90
- loss = sess.run(cost, feed_dict: { X => x_test, y => y_test })
88
+ loss = sess.run(cost, feed_dict: {X => x_test, y => y_test})
91
89
  puts "loss test data set #{loss}"
92
- loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
90
+ loss = sess.run(cost, feed_dict: {X => x_train, y => y_train})
93
91
  puts "Testing the untrained network..."
94
92
  puts loss
95
93
  start_time = Time.now
@@ -98,12 +96,12 @@ start_time = Time.now
98
96
  sess.run(updates, feed_dict: {X => [x_train[i]], y => [y_train[i]]})
99
97
  end
100
98
 
101
- loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
99
+ loss = sess.run(cost, feed_dict: {X => x_train, y => y_train})
102
100
  puts "epoch: #{epoch}, loss #{loss}"
103
101
  end
104
102
 
105
- loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
103
+ loss = sess.run(cost, feed_dict: {X => x_train, y => y_train})
106
104
  puts "loss after training #{loss}"
107
- loss = sess.run(cost, feed_dict: { X => x_test, y => y_test })
105
+ loss = sess.run(cost, feed_dict: {X => x_test, y => y_test})
108
106
  puts "loss test data set #{loss}"
109
- puts("time elapsed ", Time.now.to_i - start_time.to_i)
107
+ puts("time elapsed ", Time.now.to_i - start_time.to_i)
@@ -7,17 +7,18 @@
7
7
  # mnist-learn gem
8
8
  # opencl_ruby_ffi gem
9
9
  require "bundler/setup"
10
- require 'tensor_stream'
11
- require 'mnist-learn'
10
+ require "tensor_stream"
11
+ require "mnist-learn"
12
12
 
13
13
  # Enable OpenCL hardware accelerated computation, not using OpenCL can be very slow
14
- # require 'tensor_stream/opencl'
14
+ # gem install tensor_stream-opencl
15
+ require 'tensor_stream/opencl'
15
16
 
16
17
  tf = TensorStream
17
18
 
18
19
  # Import MNIST data
19
20
  puts "downloading minst data"
20
- mnist = Mnist.read_data_sets('/tmp/data', one_hot: true)
21
+ mnist = Mnist.read_data_sets("/tmp/data", one_hot: true)
21
22
  puts "downloading finished"
22
23
 
23
24
  x = Float.placeholder shape: [nil, 784]
@@ -45,19 +46,18 @@ sess.run(init)
45
46
  (0...1000).each do |i|
46
47
  # load batch of images and correct answers
47
48
  batch_x, batch_y = mnist.train.next_batch(100)
48
- train_data = { x => batch_x, y_ => batch_y }
49
+ train_data = {x => batch_x, y_ => batch_y}
49
50
 
50
51
  # train
51
52
  sess.run(train_step, feed_dict: train_data)
52
- if (i % 10 == 0)
53
+ if i % 10 == 0
53
54
  # success? add code to print it
54
55
  a, c = sess.run([accuracy, cross_entropy], feed_dict: train_data)
55
56
  puts "#{i} train accuracy #{a}, error #{c}"
56
57
 
57
58
  # success on test data?
58
- test_data = { x => mnist.test.images, y_ => mnist.test.labels }
59
+ test_data = {x => mnist.test.images, y_ => mnist.test.labels}
59
60
  a, c = sess.run([accuracy, cross_entropy], feed_dict: test_data)
60
61
  puts " test accuracy #{a}, error #{c}"
61
62
  end
62
63
  end
63
-
@@ -0,0 +1,112 @@
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
+ # Create model
56
+ def neural_net(x, weights, biases)
57
+ tf = TensorStream
58
+ # Hidden fully connected layer with 256 neurons
59
+ layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"])
60
+ # Hidden fully connected layer with 256 neurons
61
+ layer_2 = tf.add(tf.matmul(layer_1, weights["h2"]), biases["b2"])
62
+ # Output fully connected layer with a neuron for each class
63
+ tf.matmul(layer_2, weights["out"]) + biases["out"]
64
+ end
65
+
66
+ # Construct model
67
+ logits = neural_net(X, weights, biases)
68
+ prediction = tf.nn.softmax(logits)
69
+
70
+ # Define loss and optimizer
71
+ loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(
72
+ logits: logits, labels: Y
73
+ ))
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
@@ -6,11 +6,10 @@
6
6
  #
7
7
 
8
8
  require "bundler/setup"
9
- require 'tensor_stream'
9
+ require "tensor_stream"
10
10
  # require 'tensor_stream/opencl'
11
11
  # require 'pry-byebug'
12
12
 
13
-
14
13
  tf = TensorStream
15
14
 
16
15
  num_epochs = 100
@@ -23,30 +22,27 @@ batch_size = 5
23
22
  num_batches = total_series_length / batch_size / truncated_backprop_length
24
23
  randomizer = TensorStream.random_uniform([total_series_length], minval: 0, maxval: 2)
25
24
 
26
-
27
25
  def generate_data(randomizer, total_series_length, batch_size, echo_step)
28
26
  x = randomizer.eval
29
27
  y = x.rotate(-echo_step)
30
28
 
31
29
  y[echo_step] = 0
32
30
 
33
- x = TensorStream::TensorShape.reshape(x, [batch_size, -1]) # The first index changing slowest, subseries as rows
31
+ x = TensorStream::TensorShape.reshape(x, [batch_size, -1]) # The first index changing slowest, subseries as rows
34
32
  y = TensorStream::TensorShape.reshape(y, [batch_size, -1])
35
33
  [x, y]
36
34
  end
37
35
 
38
- batchX_placeholder = tf.placeholder(:float32, shape: [batch_size, truncated_backprop_length], name: 'batch_x')
39
- batchY_placeholder = tf.placeholder(:int32, shape: [batch_size, truncated_backprop_length], name: 'batch_y')
40
-
41
- init_state = tf.placeholder(:float32, shape: [batch_size, state_size], name: 'init_state')
42
-
36
+ batchX_placeholder = tf.placeholder(:float32, shape: [batch_size, truncated_backprop_length], name: "batch_x")
37
+ batchY_placeholder = tf.placeholder(:int32, shape: [batch_size, truncated_backprop_length], name: "batch_y")
43
38
 
44
- W = tf.variable(tf.random_uniform([state_size+1, state_size]), dtype: :float32, name: 'W')
45
- b = tf.variable(tf.zeros([state_size]), dtype: :float32, name: 'b')
39
+ init_state = tf.placeholder(:float32, shape: [batch_size, state_size], name: "init_state")
46
40
 
47
- W2 = tf.variable(tf.random_uniform([state_size, num_classes]), dtype: :float32, name: 'W2')
48
- b2 = tf.variable(tf.zeros([num_classes]), dtype: :float32, name: 'b2')
41
+ W = tf.variable(tf.random_uniform([state_size + 1, state_size]), dtype: :float32, name: "W")
42
+ b = tf.variable(tf.zeros([state_size]), dtype: :float32, name: "b")
49
43
 
44
+ W2 = tf.variable(tf.random_uniform([state_size, num_classes]), dtype: :float32, name: "W2")
45
+ b2 = tf.variable(tf.zeros([num_classes]), dtype: :float32, name: "b2")
50
46
 
51
47
  inputs_series = tf.unpack(batchX_placeholder, axis: 1)
52
48
  labels_series = tf.unpack(batchY_placeholder, axis: 1)
@@ -56,23 +52,23 @@ states_series = []
56
52
 
57
53
  inputs_series.each do |current_input|
58
54
  current_input = tf.reshape(current_input, [batch_size, 1])
59
- input_and_state_concatenated = tf.concat([current_input, current_state], 1) # Increasing number of columns
60
- next_state = tf.tanh(tf.matmul(input_and_state_concatenated, W) + b) # Broadcasted addition
55
+ input_and_state_concatenated = tf.concat([current_input, current_state], 1) # Increasing number of columns
56
+ next_state = tf.tanh(tf.matmul(input_and_state_concatenated, W) + b) # Broadcasted addition
61
57
  states_series << next_state
62
58
  current_state = next_state
63
59
  end
64
60
 
65
- logits_series = states_series.collect do |state|
61
+ logits_series = states_series.collect { |state|
66
62
  tf.matmul(state, W2) + b2
67
- end
63
+ }
68
64
 
69
- predictions_series = logits_series.collect do |logits|
65
+ predictions_series = logits_series.collect { |logits|
70
66
  tf.nn.softmax(logits)
71
- end
67
+ }
72
68
 
73
- losses = logits_series.zip(labels_series).collect do |logits, labels|
69
+ losses = logits_series.zip(labels_series).collect { |logits, labels|
74
70
  tf.nn.sparse_softmax_cross_entropy_with_logits(logits: logits, labels: labels)
75
- end
71
+ }
76
72
  total_loss = tf.reduce_mean(losses)
77
73
 
78
74
  train_step = TensorStream::Train::AdagradOptimizer.new(0.1).minimize(total_loss)
@@ -93,16 +89,17 @@ tf.session do |sess|
93
89
  batchY = y.map { |y| y[start_idx...end_idx] }
94
90
 
95
91
  _total_loss, _train_step, _current_state, _predictions_series = sess.run(
96
- [total_loss, train_step, current_state, predictions_series],
97
- feed_dict: {
98
- batchX_placeholder => batchX,
99
- batchY_placeholder => batchY,
100
- init_state => _current_state
101
- })
102
-
103
- if batch_idx%10 == 0
104
- print("Step",batch_idx, " Loss ", _total_loss, "\n")
92
+ [total_loss, train_step, current_state, predictions_series],
93
+ feed_dict: {
94
+ batchX_placeholder => batchX,
95
+ batchY_placeholder => batchY,
96
+ init_state => _current_state,
97
+ }
98
+ )
99
+
100
+ if batch_idx % 10 == 0
101
+ print("Step", batch_idx, " Loss ", _total_loss, "\n")
105
102
  end
106
103
  end
107
104
  end
108
- end
105
+ end
@@ -1,4 +1,4 @@
1
- '''
1
+ ""'
2
2
  A nearest neighbor learning algorithm example using TensorFlow library.
3
3
  This example is using the MNIST database of handwritten digits
4
4
  (http://yann.lecun.com/exdb/mnist/)
@@ -7,19 +7,19 @@ Author: Aymeric Damien
7
7
  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
- require 'tensor_stream'
13
- require 'mnist-learn'
12
+ require "tensor_stream"
13
+ require "mnist-learn"
14
14
 
15
15
  tf = TensorStream
16
16
 
17
17
  # Import MNIST data
18
- mnist = Mnist.read_data_sets('/tmp/data', one_hot: true)
18
+ mnist = Mnist.read_data_sets("/tmp/data", one_hot: true)
19
19
 
20
20
  # In this example, we limit mnist data
21
- Xtr, Ytr = mnist.train.next_batch(5000) #5000 for training (nn candidates)
22
- Xte, Yte = mnist.test.next_batch(200) #200 for testing
21
+ Xtr, Ytr = mnist.train.next_batch(5000) # 5000 for training (nn candidates)
22
+ Xte, Yte = mnist.test.next_batch(200) # 200 for testing
23
23
 
24
24
  # tf Graph Input
25
25
  xtr = tf.placeholder(:float, shape: [nil, 784])
@@ -34,7 +34,7 @@ pred = tf.argmin(distance, 0)
34
34
  accuracy = 0.0
35
35
 
36
36
  # Initialize the variables (i.e. assign their default value)
37
- init = tf.global_variables_initializer()
37
+ init = tf.global_variables_initializer
38
38
 
39
39
  # Start training
40
40
  tf.session do |sess|
@@ -43,13 +43,13 @@ tf.session do |sess|
43
43
  Xte.size.times do |i|
44
44
  # Get nearest neighbor
45
45
  nn_index = sess.run(pred, feed_dict: {xtr => Xtr, xte => Xte[i]})
46
- print("Test ", i, "Prediction: ",Ytr[nn_index].max, \
47
- "True Class: ", Yte[i].max, "\n")
46
+ print("Test ", i, "Prediction: ", Ytr[nn_index].max, \
47
+ "True Class: ", Yte[i].max, "\n")
48
48
  if Ytr[nn_index].max == Yte[i].max
49
- accuracy += 1.0/ Xte.size
49
+ accuracy += 1.0 / Xte.size
50
50
  end
51
51
  end
52
52
 
53
53
  print("Done!")
54
54
  print("Accuracy:", accuracy)
55
- end
55
+ end
@@ -0,0 +1,63 @@
1
+ require "tensor_stream"
2
+
3
+ tf = TensorStream
4
+
5
+ learning_rate = 0.01
6
+ training_epochs = 1000
7
+ display_step = 50
8
+
9
+ train_x = [3.3, 4.4, 5.5, 6.71, 6.93, 4.168, 9.779, 6.182, 7.59, 2.167,
10
+ 7.042, 10.791, 5.313, 7.997, 5.654, 9.27, 3.1,]
11
+
12
+ train_y = [1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221,
13
+ 2.827, 3.465, 1.65, 2.904, 2.42, 2.94, 1.3,]
14
+
15
+ n_samples = train_x.size
16
+
17
+ x_value = Float.placeholder
18
+ y_value = Float.placeholder
19
+
20
+ # Set model weights
21
+ weight = rand.t.var name: "weight"
22
+
23
+ bias = rand.t.var name: "bias"
24
+
25
+ # Construct a linear model
26
+ pred = x_value * weight + bias
27
+
28
+ # Mean squared error
29
+ cost = ((pred - y_value)**2).reduce / (2 * n_samples)
30
+
31
+ # Other optimizers --
32
+ #
33
+ # optimizer = TensorStream::Train::MomentumOptimizer.new(learning_rate, momentum, use_nesterov: true).minimize(cost)
34
+ # optimizer = TensorStream::Train::AdamOptimizer.new(learning_rate).minimize(cost)
35
+ # optimizer = TensorStream::Train::AdadeltaOptimizer.new(1.0).minimize(cost)
36
+ # optimizer = TensorStream::Train::AdagradOptimizer.new(0.01).minimize(cost)
37
+ # optimizer = TensorStream::Train::RMSPropOptimizer.new(0.01, centered: true).minimize(cost)
38
+ optimizer = TensorStream::Train::GradientDescentOptimizer.new(learning_rate).minimize(cost)
39
+
40
+ # Initialize the variables (i.e. assign their default value)
41
+ init = tf.global_variables_initializer
42
+
43
+ tf.session do |sess|
44
+ start_time = Time.now
45
+ sess.run(init)
46
+
47
+ (0..training_epochs).each do |epoch|
48
+ train_x.zip(train_y).each do |x, y|
49
+ sess.run(optimizer, feed_dict: {x_value => x, y_value => y})
50
+ end
51
+
52
+ if (epoch + 1) % display_step == 0
53
+ c = sess.run(cost, feed_dict: {x_value => train_x, y_value => train_y})
54
+ puts("Epoch:", "%04d" % (epoch + 1), "cost=", c, \
55
+ "W=", sess.run(weight), "b=", sess.run(bias))
56
+ end
57
+ end
58
+
59
+ puts "Optimization Finished!"
60
+ training_cost = sess.run(cost, feed_dict: {x_value => train_x, y_value => train_y})
61
+ puts "Training cost=", training_cost, "W=", sess.run(weight), "b=", sess.run(bias), '\n'
62
+ puts "time elapsed ", Time.now.to_i - start_time.to_i
63
+ end