tensor_stream 0.6.1 → 0.7.0
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/.rubocop.yml +10 -0
- data/CHANGELOG.md +8 -0
- data/README.md +40 -1
- data/benchmark/benchmark.rb +4 -1
- data/lib/tensor_stream.rb +5 -0
- data/lib/tensor_stream/debugging/debugging.rb +4 -2
- data/lib/tensor_stream/device.rb +2 -1
- data/lib/tensor_stream/evaluator/base_evaluator.rb +43 -32
- data/lib/tensor_stream/evaluator/evaluator.rb +0 -1
- data/lib/tensor_stream/evaluator/opencl/kernels/acos.cl +8 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/apply_gradient.cl +9 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/asin.cl +9 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/floor_mod.cl +3 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/log_softmax.cl +26 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/max.cl +5 -5
- data/lib/tensor_stream/evaluator/opencl/kernels/min.cl +46 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/real_div.cl +3 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax_cross.cl +27 -0
- data/lib/tensor_stream/evaluator/opencl/kernels/softmax_cross_grad.cl +28 -0
- data/lib/tensor_stream/evaluator/opencl/opencl_buffer.rb +5 -6
- data/lib/tensor_stream/evaluator/opencl/opencl_evaluator.rb +200 -265
- data/lib/tensor_stream/evaluator/operation_helpers/array_ops_helper.rb +4 -8
- data/lib/tensor_stream/evaluator/ruby_evaluator.rb +193 -122
- data/lib/tensor_stream/exceptions.rb +6 -0
- data/lib/tensor_stream/graph.rb +21 -6
- data/lib/tensor_stream/graph_builder.rb +67 -0
- data/lib/tensor_stream/graph_deserializers/protobuf.rb +271 -0
- data/lib/tensor_stream/graph_keys.rb +1 -0
- data/lib/tensor_stream/graph_serializers/pbtext.rb +11 -10
- data/lib/tensor_stream/helpers/op_helper.rb +7 -33
- data/lib/tensor_stream/helpers/string_helper.rb +16 -0
- data/lib/tensor_stream/math_gradients.rb +67 -44
- data/lib/tensor_stream/nn/nn_ops.rb +7 -1
- data/lib/tensor_stream/operation.rb +14 -27
- data/lib/tensor_stream/ops.rb +82 -29
- data/lib/tensor_stream/session.rb +4 -0
- data/lib/tensor_stream/tensor.rb +30 -12
- data/lib/tensor_stream/tensor_shape.rb +1 -1
- data/lib/tensor_stream/train/gradient_descent_optimizer.rb +37 -4
- data/lib/tensor_stream/train/saver.rb +46 -0
- data/lib/tensor_stream/train/utils.rb +37 -0
- data/lib/tensor_stream/trainer.rb +2 -0
- data/lib/tensor_stream/utils.rb +24 -14
- data/lib/tensor_stream/variable.rb +5 -11
- data/lib/tensor_stream/variable_scope.rb +15 -0
- data/lib/tensor_stream/version.rb +1 -1
- data/samples/iris.rb +8 -4
- data/samples/linear_regression.rb +1 -1
- data/samples/multigpu.rb +73 -0
- data/samples/nearest_neighbor.rb +3 -3
- data/tensor_stream.gemspec +1 -1
- data/test_samples/raw_neural_net_sample.rb +4 -1
- metadata +21 -6
    
        data/samples/iris.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            require "bundler/setup"
         | 
| 2 2 | 
             
            require 'tensor_stream'
         | 
| 3 | 
            -
            require 'tensor_stream/evaluator/opencl/opencl_evaluator'
         | 
| 3 | 
            +
            # require 'tensor_stream/evaluator/opencl/opencl_evaluator'
         | 
| 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
         | 
| @@ -75,7 +75,7 @@ w_2 = init_weights([h_size, y_size]) | |
| 75 75 |  | 
| 76 76 | 
             
            # Forward propagation
         | 
| 77 77 | 
             
            yhat    = forwardprop(X, w_1, w_2)
         | 
| 78 | 
            -
            predict = tf.argmax(yhat,  | 
| 78 | 
            +
            predict = tf.argmax(yhat, 1)
         | 
| 79 79 |  | 
| 80 80 | 
             
            # Backward propagation
         | 
| 81 81 | 
             
            cost    = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels: y, logits: yhat))
         | 
| @@ -89,13 +89,17 @@ sess.run(init) | |
| 89 89 | 
             
            loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
         | 
| 90 90 | 
             
            puts "Testing the untrained network..."
         | 
| 91 91 | 
             
            puts loss
         | 
| 92 | 
            +
            start_time = Time.now
         | 
| 92 93 | 
             
            (0..100).each do |epoch|
         | 
| 93 94 | 
             
              x_train.size.times do |i|
         | 
| 94 95 | 
             
                sess.run(updates, feed_dict: {X => [x_train[i]], y => [y_train[i]]})
         | 
| 95 | 
            -
                loss = sess.run(cost, feed_dict: { X => [x_train[i]], y => [y_train[i]] })
         | 
| 96 96 | 
             
              end
         | 
| 97 | 
            +
              loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
         | 
| 97 98 | 
             
              puts "epoch: #{epoch}, loss #{loss}"
         | 
| 98 99 | 
             
            end
         | 
| 99 100 |  | 
| 100 101 | 
             
            loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
         | 
| 101 | 
            -
            puts "loss after training #{loss}"
         | 
| 102 | 
            +
            puts "loss after training #{loss}"
         | 
| 103 | 
            +
            loss = sess.run(cost, feed_dict: { X => x_test, y => y_test })
         | 
| 104 | 
            +
            puts "loss test data set #{loss}"
         | 
| 105 | 
            +
            puts("time elapsed ", Time.now.to_i - start_time.to_i)
         | 
| @@ -26,7 +26,7 @@ b = tf.variable(rand, name: "bias") | |
| 26 26 | 
             
            pred = X * W + b
         | 
| 27 27 |  | 
| 28 28 | 
             
            # Mean squared error
         | 
| 29 | 
            -
            cost =  | 
| 29 | 
            +
            cost = ((pred - Y) ** 2).reduce(:+) / ( 2 * n_samples)
         | 
| 30 30 |  | 
| 31 31 | 
             
            optimizer = TensorStream::Train::GradientDescentOptimizer.new(learning_rate).minimize(cost)
         | 
| 32 32 |  | 
    
        data/samples/multigpu.rb
    ADDED
    
    | @@ -0,0 +1,73 @@ | |
| 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)
         | 
    
        data/samples/nearest_neighbor.rb
    CHANGED
    
    | @@ -36,14 +36,14 @@ accuracy = 0.0 | |
| 36 36 | 
             
            init = tf.global_variables_initializer()
         | 
| 37 37 |  | 
| 38 38 | 
             
            # Start training
         | 
| 39 | 
            -
            tf.session | 
| 39 | 
            +
            tf.session do |sess|
         | 
| 40 40 | 
             
              # Run the initializer
         | 
| 41 41 | 
             
              sess.run(init)
         | 
| 42 42 | 
             
              Xte.size.times do |i|
         | 
| 43 43 | 
             
                # Get nearest neighbor
         | 
| 44 44 | 
             
                nn_index = sess.run(pred, feed_dict: {xtr => Xtr, xte => Xte[i]})
         | 
| 45 | 
            -
                print("Test", i, "Prediction:",Ytr[nn_index].max, \
         | 
| 46 | 
            -
                        "True Class:", Yte[i].max)
         | 
| 45 | 
            +
                print("Test ", i, "Prediction: ",Ytr[nn_index].max, \
         | 
| 46 | 
            +
                        "True Class: ", Yte[i].max, "\n")
         | 
| 47 47 | 
             
                if Ytr[nn_index].max == Yte[i].max
         | 
| 48 48 | 
             
                  accuracy += 1.0/ Xte.size
         | 
| 49 49 | 
             
                end
         | 
    
        data/tensor_stream.gemspec
    CHANGED
    
    | @@ -41,7 +41,7 @@ Gem::Specification.new do |spec| | |
| 41 41 | 
             
              spec.add_development_dependency "rspec_junit_formatter"
         | 
| 42 42 | 
             
              spec.add_development_dependency "mnist-learn"
         | 
| 43 43 | 
             
              spec.add_development_dependency "opencl_ruby_ffi"
         | 
| 44 | 
            +
              spec.add_development_dependency "simplecov"
         | 
| 44 45 | 
             
              spec.add_dependency "deep_merge"
         | 
| 45 46 | 
             
              spec.add_dependency "concurrent-ruby"
         | 
| 46 | 
            -
              spec.add_dependency "sciruby"
         | 
| 47 47 | 
             
            end
         | 
| @@ -86,8 +86,11 @@ tf.session do |sess| | |
| 86 86 | 
             
                # Run the initializer
         | 
| 87 87 | 
             
                sess.run(init)
         | 
| 88 88 |  | 
| 89 | 
            +
                print("Testing Accuracy:", \
         | 
| 90 | 
            +
                    sess.run(accuracy, feed_dict: { X => mnist.test.images,
         | 
| 91 | 
            +
                                                    Y => mnist.test.labels}))
         | 
| 92 | 
            +
             | 
| 89 93 | 
             
                (1..num_steps+1).each do |step|
         | 
| 90 | 
            -
                    
         | 
| 91 94 | 
             
                    batch_x, batch_y = mnist.train.next_batch(batch_size)
         | 
| 92 95 | 
             
                    # Run optimization op (backprop)
         | 
| 93 96 | 
             
                    puts "."
         | 
    
        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. | 
| 4 | 
            +
              version: 0.7.0
         | 
| 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-08-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -165,13 +165,13 @@ dependencies: | |
| 165 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 166 166 | 
             
                    version: '0'
         | 
| 167 167 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 168 | 
            -
              name:  | 
| 168 | 
            +
              name: simplecov
         | 
| 169 169 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 170 | 
             
                requirements:
         | 
| 171 171 | 
             
                - - ">="
         | 
| 172 172 | 
             
                  - !ruby/object:Gem::Version
         | 
| 173 173 | 
             
                    version: '0'
         | 
| 174 | 
            -
              type: : | 
| 174 | 
            +
              type: :development
         | 
| 175 175 | 
             
              prerelease: false
         | 
| 176 176 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 177 177 | 
             
                requirements:
         | 
| @@ -179,7 +179,7 @@ dependencies: | |
| 179 179 | 
             
                  - !ruby/object:Gem::Version
         | 
| 180 180 | 
             
                    version: '0'
         | 
| 181 181 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 182 | 
            -
              name:  | 
| 182 | 
            +
              name: deep_merge
         | 
| 183 183 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 184 184 | 
             
                requirements:
         | 
| 185 185 | 
             
                - - ">="
         | 
| @@ -193,7 +193,7 @@ dependencies: | |
| 193 193 | 
             
                  - !ruby/object:Gem::Version
         | 
| 194 194 | 
             
                    version: '0'
         | 
| 195 195 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 196 | 
            -
              name:  | 
| 196 | 
            +
              name: concurrent-ruby
         | 
| 197 197 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 198 198 | 
             
                requirements:
         | 
| 199 199 | 
             
                - - ">="
         | 
| @@ -246,9 +246,12 @@ files: | |
| 246 246 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/_bool_operand.cl
         | 
| 247 247 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/_operand.cl
         | 
| 248 248 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/abs.cl
         | 
| 249 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/acos.cl
         | 
| 249 250 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/add.cl
         | 
| 251 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/apply_gradient.cl
         | 
| 250 252 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/argmax.cl
         | 
| 251 253 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/argmin.cl
         | 
| 254 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/asin.cl
         | 
| 252 255 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/cast.cl
         | 
| 253 256 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/ceil.cl
         | 
| 254 257 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/cond.cl.erb
         | 
| @@ -257,14 +260,18 @@ files: | |
| 257 260 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/exp.cl
         | 
| 258 261 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/floor.cl
         | 
| 259 262 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/floor_div.cl
         | 
| 263 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/floor_mod.cl
         | 
| 260 264 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/gemm.cl
         | 
| 261 265 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/log.cl
         | 
| 262 266 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/log1p.cl
         | 
| 267 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/log_softmax.cl
         | 
| 263 268 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/max.cl
         | 
| 269 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/min.cl
         | 
| 264 270 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/mod.cl
         | 
| 265 271 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/mul.cl
         | 
| 266 272 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/negate.cl
         | 
| 267 273 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/pow.cl
         | 
| 274 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/real_div.cl
         | 
| 268 275 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/reciprocal.cl
         | 
| 269 276 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/round.cl
         | 
| 270 277 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/sigmoid.cl
         | 
| @@ -272,6 +279,8 @@ files: | |
| 272 279 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/sign.cl
         | 
| 273 280 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/sin.cl
         | 
| 274 281 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/softmax.cl
         | 
| 282 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/softmax_cross.cl
         | 
| 283 | 
            +
            - lib/tensor_stream/evaluator/opencl/kernels/softmax_cross_grad.cl
         | 
| 275 284 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/softmax_grad.cl
         | 
| 276 285 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/sqrt.cl
         | 
| 277 286 | 
             
            - lib/tensor_stream/evaluator/opencl/kernels/square.cl
         | 
| @@ -289,7 +298,10 @@ files: | |
| 289 298 | 
             
            - lib/tensor_stream/evaluator/operation_helpers/math_helper.rb
         | 
| 290 299 | 
             
            - lib/tensor_stream/evaluator/operation_helpers/random_gaussian.rb
         | 
| 291 300 | 
             
            - lib/tensor_stream/evaluator/ruby_evaluator.rb
         | 
| 301 | 
            +
            - lib/tensor_stream/exceptions.rb
         | 
| 292 302 | 
             
            - lib/tensor_stream/graph.rb
         | 
| 303 | 
            +
            - lib/tensor_stream/graph_builder.rb
         | 
| 304 | 
            +
            - lib/tensor_stream/graph_deserializers/protobuf.rb
         | 
| 293 305 | 
             
            - lib/tensor_stream/graph_keys.rb
         | 
| 294 306 | 
             
            - lib/tensor_stream/graph_serializers/graphml.rb
         | 
| 295 307 | 
             
            - lib/tensor_stream/graph_serializers/pbtext.rb
         | 
| @@ -308,10 +320,12 @@ files: | |
| 308 320 | 
             
            - lib/tensor_stream/tensor_shape.rb
         | 
| 309 321 | 
             
            - lib/tensor_stream/train/gradient_descent_optimizer.rb
         | 
| 310 322 | 
             
            - lib/tensor_stream/train/saver.rb
         | 
| 323 | 
            +
            - lib/tensor_stream/train/utils.rb
         | 
| 311 324 | 
             
            - lib/tensor_stream/trainer.rb
         | 
| 312 325 | 
             
            - lib/tensor_stream/types.rb
         | 
| 313 326 | 
             
            - lib/tensor_stream/utils.rb
         | 
| 314 327 | 
             
            - lib/tensor_stream/variable.rb
         | 
| 328 | 
            +
            - lib/tensor_stream/variable_scope.rb
         | 
| 315 329 | 
             
            - lib/tensor_stream/version.rb
         | 
| 316 330 | 
             
            - samples/error.graphml
         | 
| 317 331 | 
             
            - samples/gradient_sample.graphml
         | 
| @@ -319,6 +333,7 @@ files: | |
| 319 333 | 
             
            - samples/iris.rb
         | 
| 320 334 | 
             
            - samples/linear_regression.rb
         | 
| 321 335 | 
             
            - samples/logistic_regression.rb
         | 
| 336 | 
            +
            - samples/multigpu.rb
         | 
| 322 337 | 
             
            - samples/nearest_neighbor.rb
         | 
| 323 338 | 
             
            - tensor_stream.gemspec
         | 
| 324 339 | 
             
            - test_samples/error.graphml
         |