diff options
author | 2016-10-28 17:45:51 -0800 | |
---|---|---|
committer | 2016-10-28 19:05:47 -0700 | |
commit | 3bb585a7b3592763ef5c6b11a897c1a8ff99ea81 (patch) | |
tree | cb42e1ad1b959a707aac85935a80e5abfe656c51 /tensorflow/core/kernels/scatter_nd_op_test.cc | |
parent | 64081c872e7c617e4378135c634ffd1a24162103 (diff) |
Automated rollback of change 137564676
Change: 137576487
Diffstat (limited to 'tensorflow/core/kernels/scatter_nd_op_test.cc')
-rw-r--r-- | tensorflow/core/kernels/scatter_nd_op_test.cc | 320 |
1 files changed, 0 insertions, 320 deletions
diff --git a/tensorflow/core/kernels/scatter_nd_op_test.cc b/tensorflow/core/kernels/scatter_nd_op_test.cc deleted file mode 100644 index d6743a6867..0000000000 --- a/tensorflow/core/kernels/scatter_nd_op_test.cc +++ /dev/null @@ -1,320 +0,0 @@ -/* Copyright 2015 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -==============================================================================*/ - -#include <functional> -#include <memory> -#include <vector> - -#include "tensorflow/core/framework/allocator.h" -#include "tensorflow/core/framework/fake_input.h" -#include "tensorflow/core/framework/graph.pb.h" -#include "tensorflow/core/framework/node_def_builder.h" -#include "tensorflow/core/framework/op_kernel.h" -#include "tensorflow/core/framework/tensor.h" -#include "tensorflow/core/framework/types.h" -#include "tensorflow/core/framework/types.pb.h" -#include "tensorflow/core/kernels/ops_testutil.h" -#include "tensorflow/core/kernels/ops_util.h" -#include "tensorflow/core/lib/core/status_test_util.h" -#include "tensorflow/core/lib/random/simple_philox.h" -#include "tensorflow/core/platform/logging.h" -#include "tensorflow/core/platform/test.h" -#include "tensorflow/core/platform/test_benchmark.h" - -namespace tensorflow { -namespace { - -class ScatterNdUpdateOpTest : public OpsTestBase { - protected: - void MakeOp(DataType variable_ref_type, DataType index_type) { - TF_ASSERT_OK(NodeDefBuilder("myop", "ScatterNdUpdate") - .Input(FakeInput(variable_ref_type)) - .Input(FakeInput(index_type)) - .Input(FakeInput(RemoveRefType(variable_ref_type))) - .Finalize(node_def())); - TF_ASSERT_OK(InitOp()); - } -}; - -TEST_F(ScatterNdUpdateOpTest, Simple_StringType) { - MakeOp(DT_STRING_REF, DT_INT32); - AddInputFromArray<string>(TensorShape({1}), {"Brain"}); - AddInputFromArray<int32>(TensorShape({1}), {0}); - AddInputFromArray<string>(TensorShape({1}), {"TensorFlow"}); - TF_ASSERT_OK(RunOpKernel()); - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_STRING, TensorShape({1})); - test::FillValues<string>(&expected, {"TensorFlow"}); - test::ExpectTensorEqual<string>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, Simple_BoolType) { - MakeOp(DT_BOOL_REF, DT_INT32); - AddInputFromArray<bool>(TensorShape({1}), {false}); - AddInputFromArray<int32>(TensorShape({1}), {0}); - AddInputFromArray<bool>(TensorShape({1}), {true}); - TF_ASSERT_OK(RunOpKernel()); - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_BOOL, TensorShape({1})); - test::FillValues<bool>(&expected, {true}); - test::ExpectTensorEqual<bool>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, Simple_TwoD32) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5, 3}), - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({3, 1}), {0, 4, 2}); - AddInputFromArray<float>(TensorShape({3, 3}), - {100, 101, 102, 777, 778, 779, 10000, 10001, 10002}); - TF_ASSERT_OK(RunOpKernel()); - - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_FLOAT, TensorShape({5, 3})); - test::FillValues<float>(&expected, {100, 101, 102, 0, 0, 0, 10000, 10001, - 10002, 0, 0, 0, 777, 778, 779}); - test::ExpectTensorEqual<float>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, Simple_Two64) { - MakeOp(DT_FLOAT_REF, DT_INT64); - - // Feed and run - AddInputFromArray<float>(TensorShape({5, 3}), - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int64>(TensorShape({3, 1}), {0, 4, 2}); - AddInputFromArray<float>(TensorShape({3, 3}), - {100, 101, 102, 777, 778, 779, 10000, 10001, 10002}); - TF_ASSERT_OK(RunOpKernel()); - - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_FLOAT, TensorShape({5, 3})); - test::FillValues<float>(&expected, {100, 101, 102, 0, 0, 0, 10000, 10001, - 10002, 0, 0, 0, 777, 778, 779}); - test::ExpectTensorEqual<float>(expected, params_tensor); -} -/*TEST_F(ScatterNdUpdateOpTest, Simple_ZeroElements) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({0}), {}); - AddInputFromArray<int32>(TensorShape({0}), {}); - AddInputFromArray<float>(TensorShape({0}), {}); - Status s = RunOpKernel(); - EXPECT_TRUE(StringPiece(s.ToString()) - .contains("Output must not have 0 elements, got shape: ")) - << s; -}*/ - -TEST_F(ScatterNdUpdateOpTest, Simple_ZeroD) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5}), {0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({1}), {3}); - AddInputFromArray<float>(TensorShape({1}), {101}); - TF_ASSERT_OK(RunOpKernel()); - - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_FLOAT, TensorShape({5})); - test::FillValues<float>(&expected, {0, 0, 0, 101, 0}); - test::ExpectTensorEqual<float>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, Simple_OneD) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5}), {0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({3, 1}), {0, 4, 2}); - AddInputFromArray<float>(TensorShape({3}), {100, 101, 102}); - TF_ASSERT_OK(RunOpKernel()); - - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_FLOAT, TensorShape({5})); - test::FillValues<float>(&expected, {100, 0, 102, 0, 101}); - test::ExpectTensorEqual<float>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, HigherRank) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({8}), {0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({2, 3, 1}), {0, 4, 2, 1, 3, 6}); - AddInputFromArray<float>(TensorShape({2, 3}), {10, 20, 30, 40, 50, 60}); - TF_ASSERT_OK(RunOpKernel()); - - // Check the new state of the input - Tensor params_tensor = *mutable_input(0).tensor; - Tensor expected(allocator(), DT_FLOAT, TensorShape({8})); - test::FillValues<float>(&expected, {10, 40, 30, 50, 20, 0, 60, 0}); - test::ExpectTensorEqual<float>(expected, params_tensor); -} - -TEST_F(ScatterNdUpdateOpTest, Error_IndexOutOfRange) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5, 3}), - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({3, 1}), {0, 4, 99}); - AddInputFromArray<float>(TensorShape({3, 3}), - {100, 101, 102, 777, 778, 779, 10000, 10001, 10002}); - Status s = RunOpKernel(); - EXPECT_TRUE(StringPiece(s.ToString()) - .contains("Invalid indices: [2,0] = [99] is not in [0, 5)")) - << s; -} - -TEST_F(ScatterNdUpdateOpTest, Error_WrongDimsIndices) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({2, 3}), {0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({1, 3, 1}), {0, 4, 99}); - AddInputFromArray<float>(TensorShape({3, 3}), - {100, 101, 102, 777, 778, 779, 10000, 10001, 10002}); - Status s = RunOpKernel(); - EXPECT_TRUE(StringPiece(s.ToString()) - .contains("The outermost dimension of updates and indices " - "must match. Got indices.shape [1,3,1], " - "updates.shape [3,3]")) - << s; -} - -TEST_F(ScatterNdUpdateOpTest, Error_MismatchedParamsAndUpdateDimensions) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5, 3}), - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({3, 1}), {0, 4, 2}); - AddInputFromArray<float>( - TensorShape({3, 4}), - {100, 101, 102, 103, 777, 778, 779, 780, 10000, 10001, 10002, 10004}); - Status s = RunOpKernel(); - EXPECT_TRUE(StringPiece(s.ToString()) - .contains("Must have updates.shape = indices.shape[0] + " - "params_shape[IXDIM:], got")) - - << s; -} - -TEST_F(ScatterNdUpdateOpTest, Error_MismatchedIndicesAndUpdateDimensions) { - MakeOp(DT_FLOAT_REF, DT_INT32); - - // Feed and run - AddInputFromArray<float>(TensorShape({5, 3}), - {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}); - AddInputFromArray<int32>(TensorShape({3, 1}), {0, 4, 2}); - AddInputFromArray<float>(TensorShape({2, 3}), - {100, 101, 102, 10000, 10001, 10002}); - Status s = RunOpKernel(); - EXPECT_TRUE(StringPiece(s.ToString()) - .contains("The outermost dimension of updates and indices " - "must match. Got ")) - << s; -} - -class ScatterNdUpdateBM : public ScatterNdUpdateOpTest { - public: - virtual void TestBody() {} - void MakeBenchmarkOp(const char* op, DataType index_type) { - TF_ASSERT_OK(NodeDefBuilder("myop", op) - .Input(FakeInput(DT_FLOAT_REF)) - .Input(FakeInput(index_type)) - .Input(FakeInput(DT_FLOAT)) - .Finalize(node_def())); - TF_CHECK_OK(InitOp()); - } -}; - -template <typename Index> -static void BM_ScatterNdHelper(int iters, int embedding_size, const char* op) { - testing::StopTiming(); - const int kRows = 10000000 / embedding_size; - std::vector<float> values; - values.reserve(kRows); - for (int i = 0; i < kRows * embedding_size; i++) { - values.push_back(i); - } - const int kNumUpdates = 1000; - random::PhiloxRandom philox(301, 17); - random::SimplePhilox rnd(&philox); - std::vector<Index> indices; - std::vector<float> updates; - for (int i = 0; i < kNumUpdates; i++) { - indices.push_back(rnd.Uniform(kRows)); - for (int j = 0; j < embedding_size; j++) { - updates.push_back(i * 10 + j); - } - } - - ScatterNdUpdateBM bm; - bm.MakeBenchmarkOp(op, DataTypeToEnum<Index>::v()); - bm.AddInputFromArray<float>(TensorShape({kRows, embedding_size}), values); - bm.AddInputFromArray<Index>(TensorShape({kNumUpdates}), indices); - bm.AddInputFromArray<float>(TensorShape({kNumUpdates, embedding_size}), - updates); - testing::ItemsProcessed((static_cast<int64>(kNumUpdates) * embedding_size) * - iters); - testing::StartTiming(); - while (iters-- > 0) { - Status s = bm.RunOpKernel(); - } - testing::StopTiming(); -} - -static void BM_ScatterNdUpdateInt32(int iters, int embedding_size) { - BM_ScatterNdHelper<int32>(iters, embedding_size, "ScatterNdUpdate"); -} -static void BM_ScatterNdUpdateInt64(int iters, int embedding_size) { - BM_ScatterNdHelper<int64>(iters, embedding_size, "ScatterNdUpdate"); -} - -static void BM_ScatterNdAddInt32(int iters, int embedding_size) { - BM_ScatterNdHelper<int32>(iters, embedding_size, "ScatterNdAdd"); -} -static void BM_ScatterNdAddInt64(int iters, int embedding_size) { - BM_ScatterNdHelper<int64>(iters, embedding_size, "ScatterNdAdd"); -} - -BENCHMARK(BM_ScatterNdUpdateInt32) - ->Arg(1) - ->Arg(10) - ->Arg(64) - ->Arg(256) - ->Arg(1024); -BENCHMARK(BM_ScatterNdUpdateInt64) - ->Arg(1) - ->Arg(10) - ->Arg(64) - ->Arg(256) - ->Arg(1024); - -BENCHMARK(BM_ScatterNdAddInt32)->Arg(1)->Arg(10)->Arg(64)->Arg(256)->Arg(1024); -BENCHMARK(BM_ScatterNdAddInt64)->Arg(1)->Arg(10)->Arg(64)->Arg(256)->Arg(1024); - -} // namespace -} // namespace tensorflow |