tensorflow-ruby 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +104 -0
  5. data/lib/datasets/download_manager.rb +49 -0
  6. data/lib/datasets/images/mnist.rb +54 -0
  7. data/lib/datasets/resource.rb +19 -0
  8. data/lib/tensorflow-ruby.rb +182 -0
  9. data/lib/tensorflow.rb +1 -0
  10. data/lib/tensorflow/batchable_type_spec.rb +4 -0
  11. data/lib/tensorflow/core/framework/allocation_description_pb.rb +21 -0
  12. data/lib/tensorflow/core/framework/api_def_pb.rb +59 -0
  13. data/lib/tensorflow/core/framework/attr_value_pb.rb +46 -0
  14. data/lib/tensorflow/core/framework/cost_graph_pb.rb +49 -0
  15. data/lib/tensorflow/core/framework/device_attributes_pb.rb +37 -0
  16. data/lib/tensorflow/core/framework/function_pb.rb +38 -0
  17. data/lib/tensorflow/core/framework/graph_pb.rb +22 -0
  18. data/lib/tensorflow/core/framework/graph_transfer_info_pb.rb +73 -0
  19. data/lib/tensorflow/core/framework/kernel_def_pb.rb +31 -0
  20. data/lib/tensorflow/core/framework/log_memory_pb.rb +53 -0
  21. data/lib/tensorflow/core/framework/node_def_pb.rb +27 -0
  22. data/lib/tensorflow/core/framework/op_def_pb.rb +58 -0
  23. data/lib/tensorflow/core/framework/reader_base_pb.rb +19 -0
  24. data/lib/tensorflow/core/framework/remote_fused_graph_execute_info_pb.rb +30 -0
  25. data/lib/tensorflow/core/framework/resource_handle_pb.rb +28 -0
  26. data/lib/tensorflow/core/framework/step_stats_pb.rb +72 -0
  27. data/lib/tensorflow/core/framework/summary_pb.rb +71 -0
  28. data/lib/tensorflow/core/framework/tensor_description_pb.rb +21 -0
  29. data/lib/tensorflow/core/framework/tensor_pb.rb +41 -0
  30. data/lib/tensorflow/core/framework/tensor_shape_pb.rb +22 -0
  31. data/lib/tensorflow/core/framework/tensor_slice_pb.rb +23 -0
  32. data/lib/tensorflow/core/framework/types_pb.rb +62 -0
  33. data/lib/tensorflow/core/framework/variable_pb.rb +45 -0
  34. data/lib/tensorflow/core/framework/versions_pb.rb +18 -0
  35. data/lib/tensorflow/core/lib/core/error_codes_pb.rb +35 -0
  36. data/lib/tensorflow/core/protobuf/cluster_pb.rb +21 -0
  37. data/lib/tensorflow/core/protobuf/config_pb.rb +180 -0
  38. data/lib/tensorflow/core/protobuf/control_flow_pb.rb +48 -0
  39. data/lib/tensorflow/core/protobuf/conv_autotuning_pb.rb +29 -0
  40. data/lib/tensorflow/core/protobuf/critical_section_pb.rb +21 -0
  41. data/lib/tensorflow/core/protobuf/debug_pb.rb +38 -0
  42. data/lib/tensorflow/core/protobuf/device_properties_pb.rb +33 -0
  43. data/lib/tensorflow/core/protobuf/eager_service_pb.rb +112 -0
  44. data/lib/tensorflow/core/protobuf/graph_debug_info_pb.rb +29 -0
  45. data/lib/tensorflow/core/protobuf/master_pb.rb +123 -0
  46. data/lib/tensorflow/core/protobuf/master_service_pb.rb +15 -0
  47. data/lib/tensorflow/core/protobuf/meta_graph_pb.rb +95 -0
  48. data/lib/tensorflow/core/protobuf/named_tensor_pb.rb +18 -0
  49. data/lib/tensorflow/core/protobuf/queue_runner_pb.rb +21 -0
  50. data/lib/tensorflow/core/protobuf/replay_log_pb.rb +48 -0
  51. data/lib/tensorflow/core/protobuf/rewriter_config_pb.rb +81 -0
  52. data/lib/tensorflow/core/protobuf/saved_model_pb.rb +18 -0
  53. data/lib/tensorflow/core/protobuf/saved_object_graph_pb.rb +87 -0
  54. data/lib/tensorflow/core/protobuf/saver_pb.rb +28 -0
  55. data/lib/tensorflow/core/protobuf/struct_pb.rb +81 -0
  56. data/lib/tensorflow/core/protobuf/tensor_bundle_pb.rb +37 -0
  57. data/lib/tensorflow/core/protobuf/tensorflow_server_pb.rb +22 -0
  58. data/lib/tensorflow/core/protobuf/trace_events_pb.rb +39 -0
  59. data/lib/tensorflow/core/protobuf/trackable_object_graph_pb.rb +40 -0
  60. data/lib/tensorflow/core/protobuf/transport_options_pb.rb +16 -0
  61. data/lib/tensorflow/core/protobuf/verifier_config_pb.rb +23 -0
  62. data/lib/tensorflow/core/protobuf/worker_pb.rb +246 -0
  63. data/lib/tensorflow/core/protobuf/worker_service_pb.rb +15 -0
  64. data/lib/tensorflow/core/util/event_pb.rb +93 -0
  65. data/lib/tensorflow/core/util/memmapped_file_system_pb.rb +22 -0
  66. data/lib/tensorflow/core/util/saved_tensor_slice_pb.rb +40 -0
  67. data/lib/tensorflow/data/batch_dataset.rb +18 -0
  68. data/lib/tensorflow/data/dataset.rb +106 -0
  69. data/lib/tensorflow/data/fixed_length_record_dataset.rb +27 -0
  70. data/lib/tensorflow/data/iterator.rb +76 -0
  71. data/lib/tensorflow/data/map_dataset.rb +17 -0
  72. data/lib/tensorflow/data/repeat_dataset.rb +16 -0
  73. data/lib/tensorflow/data/shuffle_dataset.rb +23 -0
  74. data/lib/tensorflow/data/tensor_dataset.rb +19 -0
  75. data/lib/tensorflow/data/tensor_slice_dataset.rb +15 -0
  76. data/lib/tensorflow/data/tf_record_dataset.rb +18 -0
  77. data/lib/tensorflow/data/zip_dataset.rb +24 -0
  78. data/lib/tensorflow/decorators.rb +53 -0
  79. data/lib/tensorflow/eager/context.rb +120 -0
  80. data/lib/tensorflow/eager/operation.rb +219 -0
  81. data/lib/tensorflow/eager/tensor_handle.rb +87 -0
  82. data/lib/tensorflow/error.rb +54 -0
  83. data/lib/tensorflow/execution_context.rb +62 -0
  84. data/lib/tensorflow/extensions/arg_def.rb +58 -0
  85. data/lib/tensorflow/extensions/array.rb +17 -0
  86. data/lib/tensorflow/extensions/boolean.rb +25 -0
  87. data/lib/tensorflow/extensions/narray.rb +7 -0
  88. data/lib/tensorflow/ffi.rb +291 -0
  89. data/lib/tensorflow/graph/function.rb +33 -0
  90. data/lib/tensorflow/graph/function_def.rb +62 -0
  91. data/lib/tensorflow/graph/gradients.rb +120 -0
  92. data/lib/tensorflow/graph/graph.rb +252 -0
  93. data/lib/tensorflow/graph/graph_def_options.rb +24 -0
  94. data/lib/tensorflow/graph/graph_keys.rb +50 -0
  95. data/lib/tensorflow/graph/operation.rb +176 -0
  96. data/lib/tensorflow/graph/operation_attr.rb +153 -0
  97. data/lib/tensorflow/graph/operation_description.rb +255 -0
  98. data/lib/tensorflow/graph/operation_output.rb +49 -0
  99. data/lib/tensorflow/graph/session.rb +156 -0
  100. data/lib/tensorflow/keras/datasets/boston_housing.rb +32 -0
  101. data/lib/tensorflow/keras/datasets/cifar10.rb +11 -0
  102. data/lib/tensorflow/keras/datasets/cifar100.rb +11 -0
  103. data/lib/tensorflow/keras/datasets/fashion_mnist.rb +44 -0
  104. data/lib/tensorflow/keras/datasets/imdb.rb +30 -0
  105. data/lib/tensorflow/keras/datasets/mnist.rb +18 -0
  106. data/lib/tensorflow/keras/datasets/reuters.rb +28 -0
  107. data/lib/tensorflow/keras/layers/conv.rb +14 -0
  108. data/lib/tensorflow/keras/layers/conv2d.rb +11 -0
  109. data/lib/tensorflow/keras/layers/dense.rb +68 -0
  110. data/lib/tensorflow/keras/layers/dropout.rb +27 -0
  111. data/lib/tensorflow/keras/layers/flatten.rb +25 -0
  112. data/lib/tensorflow/keras/losses/sparse_categorical_crossentropy.rb +14 -0
  113. data/lib/tensorflow/keras/metrics/mean.rb +30 -0
  114. data/lib/tensorflow/keras/metrics/sparse_categorical_accuracy.rb +17 -0
  115. data/lib/tensorflow/keras/model.rb +6 -0
  116. data/lib/tensorflow/keras/models/sequential.rb +56 -0
  117. data/lib/tensorflow/keras/optimizers/adam.rb +8 -0
  118. data/lib/tensorflow/keras/preprocessing/image.rb +22 -0
  119. data/lib/tensorflow/keras/utils.rb +83 -0
  120. data/lib/tensorflow/name_scope.rb +57 -0
  121. data/lib/tensorflow/op_def_builder.rb +49 -0
  122. data/lib/tensorflow/ops/audio.rb +13 -0
  123. data/lib/tensorflow/ops/bitwise.rb +29 -0
  124. data/lib/tensorflow/ops/control.rb +13 -0
  125. data/lib/tensorflow/ops/gradients.rb +21 -0
  126. data/lib/tensorflow/ops/image.rb +218 -0
  127. data/lib/tensorflow/ops/io.rb +123 -0
  128. data/lib/tensorflow/ops/linalg.rb +131 -0
  129. data/lib/tensorflow/ops/math.rb +493 -0
  130. data/lib/tensorflow/ops/nn.rb +286 -0
  131. data/lib/tensorflow/ops/operators.rb +31 -0
  132. data/lib/tensorflow/ops/ops.rb +102 -0
  133. data/lib/tensorflow/ops/random.rb +18 -0
  134. data/lib/tensorflow/ops/raw_ops.rb +5179 -0
  135. data/lib/tensorflow/ops/raw_ops.rb.erb +38 -0
  136. data/lib/tensorflow/printers/graph.erb +80 -0
  137. data/lib/tensorflow/printers/graph.rb +26 -0
  138. data/lib/tensorflow/printers/graph_def.erb +109 -0
  139. data/lib/tensorflow/printers/graph_def.rb +26 -0
  140. data/lib/tensorflow/python_compatiblity.rb +55 -0
  141. data/lib/tensorflow/resource_summary_writer.rb +78 -0
  142. data/lib/tensorflow/status.rb +49 -0
  143. data/lib/tensorflow/stream_executor/dnn_pb.rb +90 -0
  144. data/lib/tensorflow/strings.rb +100 -0
  145. data/lib/tensorflow/summary.rb +13 -0
  146. data/lib/tensorflow/tensor.rb +133 -0
  147. data/lib/tensorflow/tensor_data.rb +310 -0
  148. data/lib/tensorflow/tensor_mixin.rb +32 -0
  149. data/lib/tensorflow/tensor_spec.rb +10 -0
  150. data/lib/tensorflow/tensorflow/core/util/event_pb.rb +93 -0
  151. data/lib/tensorflow/train/gradient_descent_optimizer.rb +33 -0
  152. data/lib/tensorflow/train/optimizer.rb +158 -0
  153. data/lib/tensorflow/type_spec.rb +4 -0
  154. data/lib/tensorflow/variable.rb +127 -0
  155. data/lib/tensorflow/version.rb +3 -0
  156. metadata +308 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 29ce3a9ced9660aa6b78013f05d631397a41fd060dc22485c170f1f3501e0ce8
4
+ data.tar.gz: 92130ad0bd4628b2604409c7f4c215fc645233f27b36bea4fc1d00efedd06959
5
+ SHA512:
6
+ metadata.gz: 3649ed6ff6b7e1f5ab24387ea864392d0956bb0991549b7ced5c76ca224bd9fd82b8b82e4e34aa129e09a04ad3eb775f9db61a983be202cd65f09afe311e0b3c
7
+ data.tar.gz: 165b341e62aec2ce1c82ba0bb1105e8061bf5d138f8ccb757f04ae5584841fef1d9056d48bb4e398ae965e11fa905db4376ba1909214ae7031ea68d8f33ec05e
@@ -0,0 +1,18 @@
1
+ 0.2.0 (2019-12-02)
2
+ ====================
3
+ * Implementation of gradient descent
4
+ * Support for training models
5
+ * Linear regression example
6
+ * MNIST example
7
+ * Tensorboard support
8
+
9
+ 0.1.0 (2019-11-04)
10
+ ====================
11
+ * Ability to call all TensorFlow operations
12
+ * Eager execution mode
13
+ * Graph execution mode
14
+ * Importing and exporting computation graphs
15
+ * Creating and editing computation graphs
16
+ * Creating custom operators
17
+ * Gradients
18
+
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2019 Andrew Kane, Charlie Savage
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,104 @@
1
+ # Tensorflow
2
+
3
+ Ruby bindings for [Tensorflow](https://github.com/tensorflow/tensorflow).
4
+
5
+ ## Installation
6
+
7
+ First you'll need to install Tensorflow 2. You can either do a full [installation](https://www.tensorflow.org/install) or just install [Tensorflow for C](https://www.tensorflow.org/install/lang_c). In both cases, you'll need to make
8
+ sure the tensorflow library is on the system PATH so the Ruby bindings can load it.
9
+
10
+ Next install the gem:
11
+
12
+ ```ruby
13
+ gem install 'tensorflow-ruby'
14
+ ```
15
+
16
+ ## Overview
17
+
18
+ The Ruby bindings are on built on top of TensorFlow's [C API] (https://github.com/tensorflow/docs/blob/master/site/en/r1/guide/extend/bindings.md)
19
+ which provides access to some, but not all, of TensorFlow's functionality. The Ruby bindings
20
+ are designed to mimic the [Python API](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf). Just like the
21
+ Python bindings, Ruby defaults to [eager](https://www.tensorflow.org/guide/eager) execution mode.
22
+
23
+ ## Current Status
24
+
25
+ Feature | Status
26
+ :--------------------------------------------- | :---------------------------------------------------------- |
27
+ Run a predefined Graph | Implemented |
28
+ Graph construction with generated op functions | Implemented |
29
+ Gradients | Implemented |
30
+ Functions | Implemented |
31
+ Trainers | Gradient Descent Implemented |
32
+ Data API | 80% Implemented |
33
+ Tensorboard Support | Implemented |
34
+ Control Flow | Not Implemented |
35
+ Gradient Tape | Not Implemented |
36
+ Keras | Not Implemented |
37
+
38
+ ## Getting Help
39
+ To learn how to use the library:
40
+ * Read this file
41
+ * Take a look at the comprehensive test suite - it will show you examples of using all the binding's functionality
42
+ * Review the gem documentation
43
+ * Review the [Python API](https://www.tensorflow.org/versions/r2.0/api_docs/python/tf) documentation
44
+ * Take a look at the models directory for example implementations (linear regression, mnist neural network, etc.)
45
+
46
+ ## Using tensorflow-ruby
47
+
48
+ ### Constants
49
+ Constants are
50
+
51
+ ```ruby
52
+ a = Tf.constant([1, 2, 3])
53
+ b = Tf.constant([4, 5, 6])
54
+ a + b
55
+ ```
56
+
57
+ ### Variables
58
+
59
+ ```ruby
60
+ v = Tf::Variable.new(0.0)
61
+ w = v + 1
62
+ ```
63
+
64
+ ### Math
65
+
66
+ ```ruby
67
+ Tf::Math.abs([-1, -2])
68
+ Tf::Math.sqrt([1.0, 4.0, 9.0])
69
+ ```
70
+
71
+ ### Data::Dataset
72
+
73
+ ```ruby
74
+ # load
75
+ train_dataset = Tf::Data::Dataset.from_tensor_slices([train_examples, train_labels])
76
+ test_dataset = Tf::Data::Dataset.from_tensor_slices([test_examples, test_labels])
77
+
78
+ # shuffle and batch
79
+ train_dataset = train_dataset.shuffle(100).batch(32)
80
+ test_dataset = test_dataset.batch(32)
81
+
82
+ # iterate
83
+ train_dataset.each do |examples, labels|
84
+ # ...
85
+ end
86
+ ```
87
+
88
+ ## Contributing
89
+
90
+ Everyone is encouraged to help improve this project. Here are a few ways you can help:
91
+
92
+ - [Report bugs](https://github.com/cfis/tensorflow-ruby/issues)
93
+ - Fix bugs and [submit pull requests](https://github.com/cfis/tensorflow-ruby/pulls)
94
+ - Write, clarify, or fix documentation
95
+ - Suggest or add new features
96
+
97
+ To get started with development and testing:
98
+
99
+ ```sh
100
+ git clone https://github.com/cfis/tensorflow-ruby.git
101
+ cd tensorflow-ruby
102
+ bundle install
103
+ rake test
104
+ ```
@@ -0,0 +1,49 @@
1
+ require 'net/http'
2
+ require 'tmpdir'
3
+ require_relative './resource'
4
+
5
+ module Tensorflow
6
+ module Datasets
7
+ class DownloadManager
8
+ attr_reader :uri, :dir
9
+
10
+ def initialize(dir = Dir.tmpdir)
11
+ @dir = dir
12
+ end
13
+
14
+ def download(urls)
15
+ resources = Array(urls).flatten.map {|url| Resource.new(url)}
16
+ resources.each do |resource|
17
+ self.download_resource(resource)
18
+ end
19
+ resources
20
+ end
21
+
22
+ def download_resource(resource)
23
+ resource.path = File.join(self.dir, resource.filename)
24
+ return if File.exist?(resource.path)
25
+
26
+ STDOUT << "Downloading #{resource.uri}" << "\n"
27
+ http = Net::HTTP.new(resource.uri.host, resource.uri.port)
28
+ http.use_ssl = resource.uri.is_a?(URI::HTTPS)
29
+
30
+ request = Net::HTTP::Get.new(resource.uri.request_uri)
31
+
32
+ http.start do |http|
33
+ http.request(request) do |response|
34
+ file_size = response['content-length'].to_f
35
+ bytes = 0
36
+
37
+ File.open(resource.path, 'wb') do |file|
38
+ response.read_body do |chunk|
39
+ file.write(chunk)
40
+ bytes += chunk.size
41
+ #STDOUT << "#{(bytes / file_size * 100).to_i}%\r"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,54 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../../../lib', __dir__))
2
+
3
+ require 'tensorflow'
4
+
5
+ require_relative '../download_manager'
6
+
7
+ module Tensorflow
8
+ module Datasets
9
+ module Images
10
+ class Mnist
11
+ extend Decorator
12
+
13
+ BASE_URL = 'https://storage.googleapis.com/cvdf-datasets/mnist'
14
+
15
+ @tf.function(input_signature=[[:string]])
16
+ def decode_image(image)
17
+ image = IO.decode_raw(image, Tf.uint8)
18
+ image = Tf.cast(image, Tf.float32)
19
+ image = Tf.reshape(image, [784])
20
+ # Normalize from [0, 255] to [0.0, 1.0]
21
+ image / 255.0
22
+ end
23
+
24
+ @tf.function(input_signature=[[:string]])
25
+ def decode_label(label)
26
+ # tf.string -> [Tf.uint8]
27
+ label = Tf::IO.decode_raw(label, Tf.uint8)
28
+ label = Tf.reshape(label, []) # label is a scalar
29
+ Tf.cast(label, Tf.int32)
30
+ end
31
+
32
+ def dataset(images_file, labels_file)
33
+ download_manager = Datasets::DownloadManager.new
34
+ urls = ["#{BASE_URL}/#{images_file}",
35
+ "#{BASE_URL}/#{labels_file}"]
36
+
37
+ resources = download_manager.download(urls)
38
+
39
+ images = Data::FixedLengthRecordDataset.new(resources.first.path, 28 * 28, header_bytes: 16, compression_type: 'GZIP').map_func(self.decode_image)
40
+ labels = Data::FixedLengthRecordDataset.new(resources.last.path, 1, header_bytes: 8, compression_type: 'GZIP').map_func(self.decode_label)
41
+ Data::ZipDataset.new(images, labels)
42
+ end
43
+
44
+ def train
45
+ dataset('train-images-idx3-ubyte.gz', 'train-labels-idx1-ubyte.gz')
46
+ end
47
+
48
+ def test
49
+ dataset('t10k-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz')
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,19 @@
1
+ require 'uri'
2
+
3
+ module Tensorflow
4
+ module Datasets
5
+ class Resource
6
+ attr_reader :uri
7
+ attr_accessor :path
8
+
9
+ def initialize(url)
10
+ @uri = url.is_a?(URI) ? url : URI.parse(url)
11
+ end
12
+
13
+ def filename
14
+ File.basename(self.uri.path)
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,182 @@
1
+ # dependencies
2
+ require "ffi"
3
+ require "npy"
4
+ require "numo/narray"
5
+
6
+ # stdlib
7
+ require "digest"
8
+ require "fileutils"
9
+ require "forwardable"
10
+ require "json"
11
+ require "net/http"
12
+ require "tempfile"
13
+ require "zlib"
14
+
15
+ # Load protobufs. Is this a good idea to require all ruby files in those directories?
16
+ Dir[File.join(__dir__, 'tensorflow', 'core', 'lib', 'core', '*.rb')].each { |file| require file }
17
+ Dir[File.join(__dir__, 'tensorflow', 'core', 'stream_executor', '*.rb')].each { |file| require file }
18
+ Dir[File.join(__dir__, 'tensorflow', 'core', 'framework', '*.rb')].each { |file| require file }
19
+ #Dir[File.join(__dir__, 'tensorflow', 'core', 'protobuf', '*.rb')].each { |file| require file }
20
+ Dir[File.join(__dir__, 'tensorflow', 'core', 'util', '*.rb')].each { |file| require file }
21
+
22
+ # Ops
23
+ require "tensorflow/ops/audio"
24
+ require "tensorflow/ops/bitwise"
25
+ require "tensorflow/ops/control"
26
+ require "tensorflow/ops/image"
27
+ require "tensorflow/ops/io"
28
+ require "tensorflow/ops/linalg"
29
+ require "tensorflow/ops/math"
30
+ require "tensorflow/ops/nn"
31
+ require "tensorflow/ops/operators"
32
+ require "tensorflow/ops/ops"
33
+ require "tensorflow/ops/random"
34
+ require "tensorflow/ops/raw_ops"
35
+
36
+ # Core
37
+ require "tensorflow/ffi"
38
+ require "tensorflow/decorators"
39
+ require "tensorflow/error"
40
+ require "tensorflow/execution_context"
41
+ require "tensorflow/name_scope"
42
+ require "tensorflow/op_def_builder"
43
+ require "tensorflow/status"
44
+ require "tensorflow/strings"
45
+ require "tensorflow/tensor_mixin"
46
+ require "tensorflow/tensor_data"
47
+ require "tensorflow/tensor"
48
+ require "tensorflow/variable"
49
+ require "tensorflow/version"
50
+
51
+ # Extensions
52
+ require "tensorflow/extensions/arg_def.rb"
53
+ require "tensorflow/extensions/boolean.rb"
54
+ require "tensorflow/extensions/narray.rb"
55
+
56
+ # Printers
57
+ require "tensorflow/printers/graph"
58
+
59
+ # Eager
60
+ require "tensorflow/eager/context"
61
+ require "tensorflow/eager/operation"
62
+ require "tensorflow/eager/tensor_handle"
63
+
64
+ # graph
65
+ require "tensorflow/graph/function"
66
+ require "tensorflow/graph/function_def"
67
+ require "tensorflow/graph/gradients"
68
+ require "tensorflow/graph/graph"
69
+ require "tensorflow/graph/graph_def_options"
70
+ require "tensorflow/graph/graph_keys"
71
+ require "tensorflow/graph/operation"
72
+ require "tensorflow/graph/operation_output"
73
+ require "tensorflow/graph/operation_attr"
74
+ require "tensorflow/graph/operation_description"
75
+ require "tensorflow/graph/session"
76
+
77
+ # Ugly - now require the op gradients
78
+ require "tensorflow/ops/gradients"
79
+
80
+
81
+ # specs
82
+ require "tensorflow/type_spec"
83
+ require "tensorflow/batchable_type_spec"
84
+ require "tensorflow/tensor_spec"
85
+
86
+ # Training
87
+ require "tensorflow/train/optimizer"
88
+ require "tensorflow/train/gradient_descent_optimizer"
89
+
90
+ # Data
91
+ require "tensorflow/data/dataset"
92
+ require "tensorflow/data/batch_dataset"
93
+ require "tensorflow/data/fixed_length_record_dataset"
94
+ require "tensorflow/data/iterator"
95
+ require "tensorflow/data/map_dataset"
96
+ require "tensorflow/data/repeat_dataset"
97
+ require "tensorflow/data/shuffle_dataset"
98
+ require "tensorflow/data/tensor_dataset"
99
+ require "tensorflow/data/tensor_slice_dataset"
100
+ require "tensorflow/data/tf_record_dataset"
101
+ require "tensorflow/data/zip_dataset"
102
+
103
+ # Tensorboard
104
+ require "tensorflow/summary"
105
+ require "tensorflow/resource_summary_writer"
106
+
107
+ # keras
108
+ require "tensorflow/keras/utils"
109
+ require "tensorflow/keras/datasets/boston_housing"
110
+ require "tensorflow/keras/datasets/cifar10"
111
+ require "tensorflow/keras/datasets/cifar100"
112
+ require "tensorflow/keras/datasets/fashion_mnist"
113
+ require "tensorflow/keras/datasets/imdb"
114
+ require "tensorflow/keras/datasets/mnist"
115
+ require "tensorflow/keras/datasets/reuters"
116
+ require "tensorflow/keras/layers/conv"
117
+ require "tensorflow/keras/layers/conv2d"
118
+ require "tensorflow/keras/layers/dense"
119
+ require "tensorflow/keras/layers/dropout"
120
+ require "tensorflow/keras/layers/flatten"
121
+ require "tensorflow/keras/losses/sparse_categorical_crossentropy"
122
+ require "tensorflow/keras/metrics/mean"
123
+ require "tensorflow/keras/metrics/sparse_categorical_accuracy"
124
+ require "tensorflow/keras/model"
125
+ require "tensorflow/keras/models/sequential"
126
+ require "tensorflow/keras/optimizers/adam"
127
+ require "tensorflow/keras/preprocessing/image"
128
+
129
+ require 'tensorflow/python_compatiblity'
130
+
131
+ module Tensorflow
132
+ extend Ops
133
+
134
+ GRAPH_MODE = 0
135
+ EAGER_MODE = 1
136
+
137
+ class << self
138
+ attr_accessor :ffi_lib
139
+
140
+ def library_version
141
+ FFI.TF_Version
142
+ end
143
+ end
144
+
145
+ # friendlier error message
146
+ autoload :FFI, "tensorflow/ffi"
147
+
148
+ def self.op_defs
149
+ buffer = FFI.TF_GetAllOpList
150
+ string = buffer[:data].read_string(buffer[:length])
151
+ ops = OpList.decode(string)
152
+ ops.op.each_with_object(Hash.new) do |op_def, hash|
153
+ hash[op_def.name] = op_def
154
+ end
155
+ ensure
156
+ FFI.TF_DeleteBuffer(buffer)
157
+ end
158
+
159
+ def self.op_def(op_name)
160
+ self.op_defs[op_name]
161
+ end
162
+
163
+ def self.execution_mode
164
+ @mode ||= Tensorflow::EAGER_MODE
165
+ end
166
+
167
+ def self.execution_mode=(value)
168
+ @mode = value
169
+ end
170
+
171
+ def self.name_scope(base_name, &block)
172
+ ExecutionContext.current.name_scope(base_name, &block)
173
+ end
174
+
175
+ extend PythonCompatability
176
+ class << self
177
+ extend Forwardable
178
+ def_delegators Linalg, *Linalg.singleton_methods
179
+ def_delegators Math, *Math.singleton_methods
180
+ def_delegators NN, *NN.singleton_methods
181
+ end
182
+ end