diff options
author | 2016-02-24 16:09:04 -0800 | |
---|---|---|
committer | 2016-02-25 09:00:55 -0800 | |
commit | 8041c546bb7803dcb5f8c98877d2fe99c8966acb (patch) | |
tree | 6651aa8e1b801cbff767a0b0ba8e3ca11584c372 | |
parent | 223794ee783244977e865a3724904a39a35720ed (diff) |
Switch sdca_ops to use tf.load_library mechanism.
Change: 115505008
5 files changed, 46 insertions, 64 deletions
diff --git a/tensorflow/contrib/linear_optimizer/BUILD b/tensorflow/contrib/linear_optimizer/BUILD index d2094f3638..5d6b97a7cc 100644 --- a/tensorflow/contrib/linear_optimizer/BUILD +++ b/tensorflow/contrib/linear_optimizer/BUILD @@ -11,37 +11,24 @@ package(default_visibility = ["//tensorflow:__subpackages__"]) load("//tensorflow:tensorflow.bzl", "tf_gen_op_libs") load("//tensorflow:tensorflow.bzl", "tf_gen_op_wrapper_py") -cc_library( - name = "sdca_kernel", - srcs = ["kernels/sdca_ops.cc"], - hdrs = ["kernels/logistic-loss.h"], - visibility = ["//visibility:private"], - deps = [ - "//third_party/eigen3", - "//tensorflow/core:framework", - "//tensorflow/core:lib", - "//tensorflow/core:protos_all", +cc_binary( + name = "python/ops/_sdca_ops.so", + srcs = [ + "kernels/logistic-loss.h", + "kernels/sdca_ops.cc", + "ops/sdca_ops.cc", ], - alwayslink = 1, -) - -cc_library( - name = "sdca_ops", - srcs = ["ops/sdca_ops.cc"], + linkopts = [ + "-Wl,-Bsymbolic", + "-lm", + ], + linkshared = 1, + linkstatic = 1, deps = [ "//tensorflow/core:framework", + "//tensorflow/core:lib", + "//third_party/eigen3", ], - alwayslink = 1, -) - -tf_gen_op_libs( - op_lib_names = ["sdca_ops"], -) - -tf_gen_op_wrapper_py( - name = "gen_sdca_ops_py", - out = "gen_sdca_ops.py", - deps = [":sdca_ops"], ) py_library( @@ -50,29 +37,22 @@ py_library( "__init__.py", "python/ops/sdca_ops.py", ], + data = [":python/ops/_sdca_ops.so"], + srcs_version = "PY2AND3", +) + +py_test( + name = "sdca_ops_test", + srcs = ["python/kernel_tests/sdca_ops_test.py"], srcs_version = "PY2AND3", deps = [ - ":gen_sdca_ops_py", + ":sdca_ops_py", + "//tensorflow:tensorflow_py", + "//tensorflow/python:framework_test_lib", + "//tensorflow/python:platform_test", ], ) -# TODO(xx): Fix this compiling on OSS -# py_test( -# name = "sdca_ops_test", -# srcs = ["python/kernel_tests/sdca_ops_test.py"], -# srcs_version = "PY2AND3", -# deps = [ -# ":sdca_kernel", -# ":sdca_ops", -# ":sdca_ops_py", -# "//third_party/py/tensorflow", -# "//tensorflow/core:all_kernels", -# "//tensorflow/core:protos_all_py_pb2", -# "//tensorflow/python:framework_test_lib", -# "//tensorflow/python:platform_test", -# ], -# ) - filegroup( name = "all_files", srcs = glob( diff --git a/tensorflow/contrib/linear_optimizer/__init__.py b/tensorflow/contrib/linear_optimizer/__init__.py index c09315d450..c8cd8a31b8 100644 --- a/tensorflow/contrib/linear_optimizer/__init__.py +++ b/tensorflow/contrib/linear_optimizer/__init__.py @@ -16,11 +16,10 @@ ## This package provides optimizers to train linear models. -@@SdcaModel +To use this module import: SdcaModel from sdca_ops. + """ from __future__ import absolute_import from __future__ import division from __future__ import print_function - -from tensorflow.contrib.linear_optimizer.python.ops.sdca_ops import SdcaModel diff --git a/tensorflow/contrib/linear_optimizer/kernels/sdca_ops.cc b/tensorflow/contrib/linear_optimizer/kernels/sdca_ops.cc index 3415f94e61..e0075a34fb 100644 --- a/tensorflow/contrib/linear_optimizer/kernels/sdca_ops.cc +++ b/tensorflow/contrib/linear_optimizer/kernels/sdca_ops.cc @@ -73,12 +73,12 @@ using WeightsByIndex = std::vector<Weights>; // SparseExamples represent sparse feature groups of each example. using SparseExamples = - vector<std::unique_ptr<const PerExampleSparseIndicesWeights>>; + std::vector<std::unique_ptr<const PerExampleSparseIndicesWeights>>; // SparseExamples associated with each sparse feature group. -using SparseExamplesByIndex = vector<SparseExamples>; +using SparseExamplesByIndex = std::vector<SparseExamples>; -using DenseFeaturesByIndex = vector<tensorflow::TTypes<const float>::Vec>; +using DenseFeaturesByIndex = std::vector<tensorflow::TTypes<const float>::Vec>; // Compute the shrinkage factor for proximal sdca. inline double ShrinkageFactor(const Regularizations& regularizations) { @@ -361,7 +361,7 @@ class SdcaSolver : public OpKernel { .flat<float>()); } - vector<int64> example_ids(num_examples); + std::vector<int64> example_ids(num_examples); std::iota(example_ids.begin(), example_ids.end(), 0); std::random_device random_device; std::mt19937 random_generator(random_device()); diff --git a/tensorflow/contrib/linear_optimizer/python/kernel_tests/sdca_ops_test.py b/tensorflow/contrib/linear_optimizer/python/kernel_tests/sdca_ops_test.py index b4703dfd35..a8a83aacc3 100644 --- a/tensorflow/contrib/linear_optimizer/python/kernel_tests/sdca_ops_test.py +++ b/tensorflow/contrib/linear_optimizer/python/kernel_tests/sdca_ops_test.py @@ -19,12 +19,10 @@ from __future__ import division from __future__ import print_function import tensorflow as tf +from tensorflow.contrib.linear_optimizer.python.ops.sdca_ops import SdcaModel from tensorflow.python.framework.test_util import TensorFlowTestCase from tensorflow.python.platform import googletest -# pylint: disable=invalid-name -SdcaModel = tf.contrib.linear_optimizer.SdcaModel - def make_example_proto(feature_dict, target): e = tf.train.Example() @@ -223,9 +221,9 @@ class SdcaOptimizerTest(TensorFlowTestCase): lr.minimize().run() self.assertAllClose(0.331710, unregularized_loss.eval(), - rtol=1e-2, - atol=1e-2) - self.assertAllClose(0.591295, loss.eval(), rtol=1e-2, atol=1e-2) + rtol=3e-2, + atol=3e-2) + self.assertAllClose(0.591295, loss.eval(), rtol=3e-2, atol=3e-2) predicted_labels = tf.cast( tf.greater_equal(prediction, tf.ones_like(prediction) * 0.5), tf.float32) @@ -256,9 +254,9 @@ class SdcaOptimizerTest(TensorFlowTestCase): lr.minimize().run() self.assertAllClose(0.266189, unregularized_loss.eval(), - rtol=1e-2, - atol=1e-2) - self.assertAllClose(0.571912, loss.eval(), rtol=1e-2, atol=1e-2) + rtol=3e-2, + atol=3e-2) + self.assertAllClose(0.571912, loss.eval(), rtol=3e-2, atol=3e-2) predicted_labels = tf.cast( tf.greater_equal(prediction, tf.ones_like(prediction) * 0.5), tf.float32) diff --git a/tensorflow/contrib/linear_optimizer/python/ops/sdca_ops.py b/tensorflow/contrib/linear_optimizer/python/ops/sdca_ops.py index 030054971c..062b27d032 100644 --- a/tensorflow/contrib/linear_optimizer/python/ops/sdca_ops.py +++ b/tensorflow/contrib/linear_optimizer/python/ops/sdca_ops.py @@ -17,14 +17,19 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function -# pylint: disable=wildcard-import -from tensorflow.contrib.linear_optimizer.gen_sdca_ops import * +import os.path + from tensorflow.python.framework import ops +from tensorflow.python.framework.load_library import load_op_library from tensorflow.python.framework.ops import convert_to_tensor from tensorflow.python.framework.ops import name_scope from tensorflow.python.ops import array_ops from tensorflow.python.ops import math_ops from tensorflow.python.ops.nn import sigmoid_cross_entropy_with_logits +from tensorflow.python.platform import resource_loader + +_sdca_ops = load_op_library(os.path.join(resource_loader.get_data_files_path(), + '_sdca_ops.so')) __all__ = ['SdcaModel'] @@ -216,7 +221,7 @@ class SdcaModel(object): sparse_features_indices.append(ops.convert_to_tensor(sf.indices)) sparse_features_weights.append(ops.convert_to_tensor(sf.values)) - return sdca_solver( + return _sdca_ops.sdca_solver( sparse_features_indices, sparse_features_weights, self._convert_n_to_tensor(self._examples['dense_features']), |