Skip to content

ankane/tensorflow-ruby

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

TensorFlow Ruby

🔥 TensorFlow - the end-to-end machine learning platform - for Ruby

This gem is currently experimental and only supports basic tensor operations at the moment. Check out Torch.rb for a more complete deep learning library.

To run a TensorFlow model in Ruby, convert it to ONNX and use ONNX Runtime. Check out this tutorial for a full example.

Build Status

Installation

Install TensorFlow. For Homebrew, use:

brew install tensorflow

Add this line to your application’s Gemfile:

gem 'tensorflow'

Getting Started

This library follows the TensorFlow 2 Python API. Many methods and options are missing at the moment. Here’s the current plan. Additional PRs welcome!

Constants

a = Tf.constant([1, 2, 3])
b = Tf.constant([4, 5, 6])
a + b

Variables

v = Tf::Variable.new(0.0)
w = v + 1

Math

Tf::Math.abs([-1, -2])
Tf::Math.sqrt([1.0, 4.0, 9.0])

FizzBuzz

def fizzbuzz(max_num)
  max_num.times do |i|
    num = Tf.constant(i + 1)
    if (num % 3).to_i == 0 && (num % 5).to_i == 0
      puts "FizzBuzz"
    elsif (num % 3).to_i == 0
      puts "Fizz"
    elsif (num % 5).to_i == 0
      puts "Buzz"
    else
      puts num.to_i
    end
  end
end

fizzbuzz(15)

Data::Dataset

# load
train_dataset = Tf::Data::Dataset.from_tensor_slices([train_examples, train_labels])
test_dataset = Tf::Data::Dataset.from_tensor_slices([test_examples, test_labels])

# shuffle and batch
train_dataset = train_dataset.shuffle(100).batch(32)
test_dataset = test_dataset.batch(32)

# iterate
train_dataset.each do |examples, labels|
  # ...
end

Keras [coming soon]

mnist = Tf::Keras::Datasets::MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data
x_train = x_train / 255.0
x_test = x_test / 255.0

model = Tf::Keras::Models::Sequential.new([
  Tf::Keras::Layers::Flatten.new(input_shape: [28, 28]),
  Tf::Keras::Layers::Dense.new(128, activation: "relu"),
  Tf::Keras::Layers::Dropout.new(0.2),
  Tf::Keras::Layers::Dense.new(10, activation: "softmax")
])

model.compile(optimizer: "adam", loss: "sparse_categorical_crossentropy", metrics: ["accuracy"])
model.fit(x_train, y_train, epochs: 5)
model.evaluate(x_test, y_test)

TensorFlow Installation

Mac

Run:

brew install tensorflow

Alternatively, download the shared library and move the files in lib to /usr/local/lib.

Linux

Download the shared library and move the files in lib to /usr/local/lib.

Windows

Download the shared library and move tensorflow.dll to C:\Windows\System32.

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/ankane/tensorflow-ruby.git
cd tensorflow-ruby
bundle install
bundle exec rake test