tensor_stream 0.6.0 → 0.6.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/lib/tensor_stream/evaluator/ruby_evaluator.rb +0 -1
- data/lib/tensor_stream/nn/nn_ops.rb +2 -2
- data/lib/tensor_stream/version.rb +1 -1
- data/samples/iris.rb +46 -56
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f4f9e6d7a1640d4b24b92d7706bcab88ab5bb294551f38dc6ad403eb1b2a761b
         | 
| 4 | 
            +
              data.tar.gz: 71c245e394be382e3976f4b2b9989c2b89538f22cc40984a5a84e07fb0bca597
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a04ca2c61064dc4fb67f2653acbde962f8f8b5f56a5e5f27760f44f6032b81c61307e3b207bbb4ec42bd1713d06315ba760a710a712fb9f124efa6c7f06a7246
         | 
| 7 | 
            +
              data.tar.gz: ae8e29f412c1b63b854604696df4858ce4d3fb078c982e53a0b85fd8ff6b546c2b9502ecb4d253cb6d0f9255aa1e16b1aaa445da769a0b06bb85ed55a0aebd55
         | 
| @@ -532,7 +532,6 @@ module TensorStream | |
| 532 532 | 
             
                    matrix_a, matrix_b = inputs
         | 
| 533 533 | 
             
                    rank_a = get_rank(matrix_a)
         | 
| 534 534 | 
             
                    rank_b = get_rank(matrix_b)
         | 
| 535 | 
            -
             | 
| 536 535 | 
             
                    raise "#{tensor.inputs[0].name} rank must be greater than 1" if rank_a < 2
         | 
| 537 536 | 
             
                    raise "#{tensor.inputs[1].name} rank must be greater than 1" if rank_b < 2
         | 
| 538 537 |  | 
| @@ -11,11 +11,11 @@ module TensorStream | |
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 13 | 
             
                def self.sigmoid(input, name: nil)
         | 
| 14 | 
            -
                  TensorStream.sigmoid(input, name)
         | 
| 14 | 
            +
                  TensorStream.sigmoid(input, name: name)
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 17 | 
             
                def self.softmax_cross_entropy_with_logits(labels: nil, logits: nil, name: nil)
         | 
| 18 | 
            -
                  softmax_cross_entropy_with_logits_v2(labels, logits, name)
         | 
| 18 | 
            +
                  softmax_cross_entropy_with_logits_v2(labels: labels, logits: logits, name: name)
         | 
| 19 19 | 
             
                end
         | 
| 20 20 |  | 
| 21 21 | 
             
                def self.softmax_cross_entropy_with_logits_v2(labels: nil, logits: nil, name: nil)
         | 
    
        data/samples/iris.rb
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 1 | 
             
            require "bundler/setup"
         | 
| 2 2 | 
             
            require 'tensor_stream'
         | 
| 3 | 
            +
            require 'tensor_stream/evaluator/opencl/opencl_evaluator'
         | 
| 3 4 |  | 
| 4 5 | 
             
            # This neural network will predict the species of an iris based on sepal and petal size
         | 
| 5 6 | 
             
            # Dataset: http://en.wikipedia.org/wiki/Iris_flower_data_set
         | 
| @@ -47,65 +48,54 @@ x_test.each_with_index do |x, index| | |
| 47 48 | 
             
              validation_cases << [x, y_test[index] ]
         | 
| 48 49 | 
             
            end
         | 
| 49 50 |  | 
| 50 | 
            -
            learning_rate = 0.1
         | 
| 51 | 
            -
            num_steps = 500
         | 
| 52 | 
            -
            batch_size = 128
         | 
| 53 | 
            -
            display_step = 100
         | 
| 54 51 |  | 
| 55 | 
            -
            # Network Parameters
         | 
| 56 | 
            -
            n_hidden_1 = 4 # 1st layer number of neurons
         | 
| 57 | 
            -
            num_classes = 3 # MNIST total classes (0-9 digits)
         | 
| 58 | 
            -
            num_input = 4
         | 
| 59 | 
            -
            training_epochs = 100
         | 
| 60 52 |  | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
            # Store layers weight & bias
         | 
| 68 | 
            -
            weights = {
         | 
| 69 | 
            -
              h1: tf.variable(tf.random_normal([num_input, n_hidden_1]), name: 'h1'),
         | 
| 70 | 
            -
              out: tf.variable(tf.random_normal([num_classes, num_classes]), name: 'out')
         | 
| 71 | 
            -
            }
         | 
| 72 | 
            -
             | 
| 73 | 
            -
            biases = {
         | 
| 74 | 
            -
              b1: tf.variable(tf.random_normal([n_hidden_1]), name: 'b1'),
         | 
| 75 | 
            -
              out: tf.variable(tf.random_normal([num_classes]), name: 'b_out')
         | 
| 76 | 
            -
            }
         | 
| 53 | 
            +
            def init_weights(shape)
         | 
| 54 | 
            +
              # Weight initialization
         | 
| 55 | 
            +
              weights = TensorStream.random_normal(shape, stddev: 0.1)
         | 
| 56 | 
            +
              TensorStream.variable(weights)
         | 
| 57 | 
            +
            end
         | 
| 77 58 |  | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 59 | 
            +
            def forwardprop(x, w_1, w_2)
         | 
| 60 | 
            +
              # Forward-propagation.
         | 
| 61 | 
            +
              # IMPORTANT: yhat is not softmax since TensorFlow's softmax_cross_entropy_with_logits() does that internally.
         | 
| 62 | 
            +
              h  = TensorStream.nn.sigmoid(TensorStream.matmul(x, w_1))  # The \sigma function
         | 
| 63 | 
            +
              TensorStream.matmul(h, w_2)  # The \varphi function
         | 
| 83 64 | 
             
            end
         | 
| 84 65 |  | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
               | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 66 | 
            +
            x_size = x_train[0].size
         | 
| 67 | 
            +
            y_size = y_train[0].size
         | 
| 68 | 
            +
            h_size = 256
         | 
| 69 | 
            +
            X = tf.placeholder(:float, shape: [nil, x_size])
         | 
| 70 | 
            +
            y = tf.placeholder(:float, shape: [nil, y_size])
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            # Weight initializations
         | 
| 73 | 
            +
            w_1 = init_weights([x_size, h_size])
         | 
| 74 | 
            +
            w_2 = init_weights([h_size, y_size])
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            # Forward propagation
         | 
| 77 | 
            +
            yhat    = forwardprop(X, w_1, w_2)
         | 
| 78 | 
            +
            predict = tf.argmax(yhat, axis=1)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            # Backward propagation
         | 
| 81 | 
            +
            cost    = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels: y, logits: yhat))
         | 
| 82 | 
            +
            updates =  TensorStream::Train::GradientDescentOptimizer.new(0.01).minimize(cost)
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            # Run SGD
         | 
| 85 | 
            +
            sess = tf.session
         | 
| 86 | 
            +
            init = tf.global_variables_initializer
         | 
| 87 | 
            +
            sess.run(init)
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
         | 
| 90 | 
            +
            puts "Testing the untrained network..."
         | 
| 91 | 
            +
            puts loss
         | 
| 92 | 
            +
            (0..100).each do |epoch|
         | 
| 93 | 
            +
              x_train.size.times do |i|
         | 
| 94 | 
            +
                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]] })
         | 
| 108 96 | 
             
              end
         | 
| 109 | 
            -
               | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 97 | 
            +
              puts "epoch: #{epoch}, loss #{loss}"
         | 
| 98 | 
            +
            end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            loss = sess.run(cost, feed_dict: { X => x_train, y => y_train })
         | 
| 101 | 
            +
            puts "loss after training #{loss}"
         |