aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <nobody@tensorflow.org>2016-02-24 16:09:04 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2016-02-25 09:00:55 -0800
commit8041c546bb7803dcb5f8c98877d2fe99c8966acb (patch)
tree6651aa8e1b801cbff767a0b0ba8e3ca11584c372
parent223794ee783244977e865a3724904a39a35720ed (diff)
Switch sdca_ops to use tf.load_library mechanism.
Change: 115505008
-rw-r--r--tensorflow/contrib/linear_optimizer/BUILD70
-rw-r--r--tensorflow/contrib/linear_optimizer/__init__.py5
-rw-r--r--tensorflow/contrib/linear_optimizer/kernels/sdca_ops.cc8
-rw-r--r--tensorflow/contrib/linear_optimizer/python/kernel_tests/sdca_ops_test.py16
-rw-r--r--tensorflow/contrib/linear_optimizer/python/ops/sdca_ops.py11
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']),