10cf9ed3a719c0782695154d5a0bca260001cec15A. Unique TensorFlower# Copyright 2015 The TensorFlow Authors. All Rights Reserved. 203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# 303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# Licensed under the Apache License, Version 2.0 (the "License"); 403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# you may not use this file except in compliance with the License. 503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# You may obtain a copy of the License at 603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# 703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# http://www.apache.org/licenses/LICENSE-2.0 803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# 903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# Unless required by applicable law or agreed to in writing, software 1003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# distributed under the License is distributed on an "AS IS" BASIS, 1103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# See the License for the specific language governing permissions and 1303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# limitations under the License. 1403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower# ============================================================================== 1503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower"""Tests for partitioned_variables.py.""" 165866e065bc95c1d7de8a27413b368016941889a6Justine Tunney 1703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerfrom __future__ import absolute_import 1803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerfrom __future__ import division 1903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerfrom __future__ import print_function 2003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 2103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerimport numpy as np 2203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerfrom six.moves import xrange # pylint: disable=redefined-builtin 2303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 245866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.framework import constant_op 255866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.framework import dtypes 265866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.framework import ops 275866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import array_ops 285866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import init_ops 295866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import partitioned_variables 305866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import random_ops 315866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import variable_scope 325866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.ops import variables 335866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyfrom tensorflow.python.platform import test 3404654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 355866e065bc95c1d7de8a27413b368016941889a6Justine Tunney 365866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyclass PartitionerCreatorsTest(test.TestCase): 3704654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 38a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin def testFixedSizePartitioner(self): 39a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin with self.test_session(): 405866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioner = partitioned_variables.fixed_size_partitioner(5, axis=0) 415866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with variable_scope.variable_scope("root", partitioner=partitioner): 425866e065bc95c1d7de8a27413b368016941889a6Justine Tunney v0 = variable_scope.get_variable( 435866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v0", dtype=dtypes.float32, shape=(10, 10)) 44a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin v0_list = v0._get_variable_list() 45a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin v0_part = v0._get_partitions() 46a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin self.assertEqual(len(v0_list), 5) 47a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin self.assertAllEqual(v0_part, (5, 1)) 48a54aa42d4e1d5b60782bcee9ac346d7509195567Illia Polosukhin 492091f50c4a6549256233157f47bfb54023476938Alexandre Passos def testFixedSizePartitionerInt64(self): 502091f50c4a6549256233157f47bfb54023476938Alexandre Passos with self.test_session(): 512091f50c4a6549256233157f47bfb54023476938Alexandre Passos partitioner = partitioned_variables.fixed_size_partitioner(4, axis=0) 522091f50c4a6549256233157f47bfb54023476938Alexandre Passos with variable_scope.variable_scope("root", partitioner=partitioner): 53aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng v0 = variable_scope.get_variable("v0", dtype=dtypes.int64, shape=[20]) 542091f50c4a6549256233157f47bfb54023476938Alexandre Passos v0_list = v0._get_variable_list() 552091f50c4a6549256233157f47bfb54023476938Alexandre Passos self.assertEqual(len(v0_list), 4) 562091f50c4a6549256233157f47bfb54023476938Alexandre Passos 57170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower def testResourceFixedSizePartitioner(self): 58170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower with self.test_session(): 59170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower partitioner = partitioned_variables.fixed_size_partitioner(5, axis=0) 60170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower with variable_scope.variable_scope( 61170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower "root", partitioner=partitioner, use_resource=True): 62170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower v0 = variable_scope.get_variable( 63170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower "v0", dtype=dtypes.float32, shape=(10, 10)) 64170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower v0_list = v0._get_variable_list() 65170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower v0_part = v0._get_partitions() 66170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower self.assertEqual(len(v0_list), 5) 67170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower self.assertAllEqual(v0_part, (5, 1)) 68170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower 695866e065bc95c1d7de8a27413b368016941889a6Justine Tunney def _testVariableAxisSizePartitioner(self, 705866e065bc95c1d7de8a27413b368016941889a6Justine Tunney name, 715866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis, 725866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes, 735b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower expected_axis_shards, 745b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower expected_partitions, 755b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower max_shards=None): 765866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioner = partitioned_variables.variable_axis_size_partitioner( 775b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower axis=axis, max_shard_bytes=max_shard_bytes, max_shards=max_shards) 785b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 795866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with variable_scope.variable_scope("root", partitioner=partitioner): 805866e065bc95c1d7de8a27413b368016941889a6Justine Tunney v0 = variable_scope.get_variable( 815866e065bc95c1d7de8a27413b368016941889a6Justine Tunney name, dtype=dtypes.float32, shape=(4, 8, 16, 32)) 82775a7490047299f2b64bf4fafcb6504852b8082dWei Ho v0_list = v0._get_variable_list() 83775a7490047299f2b64bf4fafcb6504852b8082dWei Ho v0_part = v0._get_partitions() 845b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower self.assertEqual(len(v0_list), expected_axis_shards) 855b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower self.assertAllEqual(v0_part, expected_partitions) 865b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 8704654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo def testVariableAxisSizePartitioner(self): 8804654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo with self.test_session(): 8904654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # Create a partitioned variable of shape (4, 8, 16, 32) type float32 9004654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # Bytes per slice along the given axes: 9104654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 9204654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # 8 * 16 * 32 * sizeof(float32) = 16384 / slice on axis 0 9304654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # 4 * 16 * 32 * sizeof(float32) = 8192 / slice on axis 1 9404654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # 4 * 8 * 32 * sizeof(float32) = 4096 / slice on axis 2 9504654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # 4 * 8 * 16 * sizeof(float32) = 2048 / slice on axis 3 9604654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 9704654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # Now partition it in different ways... 9804654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 995b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # No need to slice: bytes_per_slice * dim0 = 65536 < max_shard_bytes 1005866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1015866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v0", 1025866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 1035866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=131072, 1045866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=1, 1055866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 1)) 1065b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 1075b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Slice exactly once: bytes_per_slice * dim1 = 65536 = max_shard_bytes 1085866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1095866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v1", 1105866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=1, 1115866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=65536, 1125866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=1, 1135866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 1)) 1145b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 1155b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Slice into 2 parts: 1165b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # bytes_per_slice = 4096 1175b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # slices_per_shard = 32768 / 4096 = 8 1185b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # axis_shards = 16 / 8 = 2 1195866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1205866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v2", 1215866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=2, 1225866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=32768, 1235866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=2, 1245866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 2, 1)) 1255b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 1265b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # This partitioner makes sure we maximize the number of shards along 1275b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # axis 3. Slice it into 32 parts: 1285b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # bytes_per_slice = 2048 1295b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # slices_per_shard = 2048 / 2048 = 1 1305b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # axis_shards = 32 / 1 = 32 1315866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1325866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v3a", 1335866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=3, 1345866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=2048, 1355866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=32, 1365866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 32)) 13704654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 1382ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # This partitioner makes sure we do not go past the bound of allowable 1395b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # number of shards along axis 3. 1405b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Slice into 32 parts: 1415b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # bytes_per_slice = 2048 1425b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # slices_per_shard = max(1, 1024 / 2048) = 1 1435b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # axis_shards = 32 / 1 = 32 1445b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Slice into max of 32 parts because: max_shard_bytes < bytes_per_slice 1455866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1465866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v3b", 1475866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=3, 1485866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=1024, 1495866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=32, 1505866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 32)) 1515b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 1525b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Specify max_shards so that it won't affect sharding. 1535866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1545866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v3c", 1555866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=3, 1565866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=1024, 1575866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=32, 1585866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 32), 1595866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shards=33) 1605b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower 1615b4ee6df47f40ba49eadc8b97435d232f0f83c0eA. Unique TensorFlower # Specify max_shards so that it will affect sharding. 1625866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testVariableAxisSizePartitioner( 1635866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "v3d", 1645866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=3, 1655866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shard_bytes=1024, 1665866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=2, 1675866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=(1, 1, 1, 2), 1685866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_shards=2) 16904654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 17004654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # Use the partitioner with strings 171aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng partitioner_axis3_str = partitioned_variables.variable_axis_size_partitioner( # pylint: disable=line-too-long 172aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng axis=3, 173aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng max_shard_bytes=32768, 174aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng bytes_per_string_element=8) 17504654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 1765866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with variable_scope.variable_scope( 1775866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "root", partitioner=partitioner_axis3_str): 1785866e065bc95c1d7de8a27413b368016941889a6Justine Tunney v3str = variable_scope.get_variable( 17904654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo "v3str", 180775a7490047299f2b64bf4fafcb6504852b8082dWei Ho initializer=np.array([""] * 4 * 8 * 16 * 32).reshape(4, 8, 16, 32), 1815866e065bc95c1d7de8a27413b368016941889a6Justine Tunney dtype=dtypes.string, 182775a7490047299f2b64bf4fafcb6504852b8082dWei Ho shape=(4, 8, 16, 32)) 183775a7490047299f2b64bf4fafcb6504852b8082dWei Ho v3str_list = v3str._get_variable_list() 184775a7490047299f2b64bf4fafcb6504852b8082dWei Ho v3str_part = v3str._get_partitions() 18504654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 1862ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # Now the estimated bytes_per_slice = 4*8*16*bytes_per_string_element 1872ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # which is equal to 4096. Setting a max_shard_bytes of 32768 18804654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo # and we should get a split of 4. 1892ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # Slice into 4 parts: 1902ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # bytes_per_slice = 4096 1912ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # slices_per_shard = 32768 / 4096 = 8 1922ec20cda397ca5ba23838261c4c9526b8506af67A. Unique TensorFlower # axis_shards = 32 / 8 = 4 19304654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo self.assertEqual(len(v3str_list), 4) 19404654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo self.assertAllEqual(v3str_part, (1, 1, 1, 4)) 19504654ab6734a81c6bf491c370218f9173484a2f0Eugene Brevdo 196f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower def _testMinMaxVariablePartitioner(self, max_partitions, axis, min_slice_size, 1975866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name, var_shape, expected_axis_shards, 1985866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions): 1995866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioner = partitioned_variables.min_max_variable_partitioner( 2005866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=max_partitions, axis=axis, min_slice_size=min_slice_size) 2015866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with variable_scope.variable_scope("root", partitioner=partitioner): 2025866e065bc95c1d7de8a27413b368016941889a6Justine Tunney v0 = variable_scope.get_variable( 2035866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name, dtype=dtypes.float32, shape=var_shape) 204f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower v0_list = v0._get_variable_list() 205f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower v0_part = v0._get_partitions() 206f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower self.assertEqual(len(v0_list), expected_axis_shards) 207f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower self.assertAllEqual(v0_part, expected_partitions) 208f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 209f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower def testMinMaxVariablePartitioner(self): 210f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower with self.test_session(): 211f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # Partitioning a variable of shape=[2048] with a minimum of 2K per slice. 2125866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2135866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2145866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2155866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=2 << 10, 2165866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v0_0", 2175866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048], 2185866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=4, 2195866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[4]) 220f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 221f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # Partitioning a variable of shape=[2048, 1024] with a minimum of 256K per 222f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # slice. 2235866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2245866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2255866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2265866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2275866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v0", 2285866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048, 1024], 2295866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=32, 2305866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[32, 1]) 231f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 232f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # max_partitions restricts partitioning of the variable. 2335866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2345866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=16, 2355866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2365866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2375866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v1_max", 2385866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048, 1024], 2395866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=16, 2405866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[16, 1]) 2415866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2425866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=1, 2435866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2445866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2455866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v2_max", 2465866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048, 1024], 2475866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=1, 2485866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[1, 1]) 249f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 250f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # Reducing/Increasing min_slice_size proportionately increases/reduces the 251f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # number of partitions. 2525866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2535866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2545866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2555866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=128 << 10, 2565866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v3_slice", 2575866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048, 1024], 2585866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=64, 2595866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[64, 1]) 2605866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2615866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2625866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2635866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=512 << 10, 2645866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v4_slice", 2655866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[2048, 1024], 2665866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=16, 2675866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[16, 1]) 268f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 269f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # Partitioning the variable along a different axis. 2705866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2715866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2725866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=1, 2735866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2745866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v5_axis", 2755866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[64, 1024, 1, 3], 2765866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=3, 2775866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[1, 3, 1, 1]) 2785866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2795866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2805866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=3, 2815866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2825866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v6_axis", 2835866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[64, 1024, 1, 3], 2845866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=3, 2855866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[1, 1, 1, 3]) 286f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower 287f2d00a47fd40c1006bc08b53be6bcbad7983dfd8A. Unique TensorFlower # Can not partition the variable more than what its shape allows. 2885866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2895866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2905866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2915866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 2925866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v7_shape", 2935866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[16, 128, 1024], 2945866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=16, 2955866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[16, 1, 1]) 2965866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._testMinMaxVariablePartitioner( 2975866e065bc95c1d7de8a27413b368016941889a6Justine Tunney max_partitions=100, 2985866e065bc95c1d7de8a27413b368016941889a6Justine Tunney axis=0, 2995866e065bc95c1d7de8a27413b368016941889a6Justine Tunney min_slice_size=256 << 10, 3005866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_name="v8_shape", 3015866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_shape=[4, 512, 1024], 3025866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_axis_shards=4, 3035866e065bc95c1d7de8a27413b368016941889a6Justine Tunney expected_partitions=[4, 1, 1]) 3045866e065bc95c1d7de8a27413b368016941889a6Justine Tunney 3055866e065bc95c1d7de8a27413b368016941889a6Justine Tunney 3065866e065bc95c1d7de8a27413b368016941889a6Justine Tunneydef _IotaInitializer(shape, dtype=dtypes.float32, partition_info=None): 3075866e065bc95c1d7de8a27413b368016941889a6Justine Tunney assert dtype == dtypes.float32 30803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower if len(shape) == 1: 30903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower return range(shape[0]) 31003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower else: 31103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower val = _IotaInitializer(shape[1:], dtype) 3125866e065bc95c1d7de8a27413b368016941889a6Justine Tunney return [[(10**i) * v for v in val] for i in range(shape[0])] 31303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 31403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 3155866e065bc95c1d7de8a27413b368016941889a6Justine Tunneyclass PartitionedVariablesTestCase(test.TestCase): 31603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 31703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def _TestSaveSpec(self, slices, expected_specs): 31803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(len(expected_specs), len(slices)) 31903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower for i in xrange(len(expected_specs)): 32003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEquals(expected_specs[i], slices[i]._save_slice_info.spec) 32103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 32203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testVecConstantInit(self): 32303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 3245866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par = constant_op.constant([1, 2, 3, 4]) 3255866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables([4], [4], rnd_par) 3265866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 3270e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 0).eval() 32803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd = rnd_par.eval() 32903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd, val) 3305866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self.assertEqual([dtypes.int32] * 4, [v.dtype.base_dtype for v in vs]) 33103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self._TestSaveSpec(vs, ["4 0,1", "4 1,1", "4 2,1", "4 3,1"]) 33203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 33303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testConstantInit(self): 33403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 3355866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par = constant_op.constant([[1, 2, 3, 4], [5, 6, 7, 8]]) 3365866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables([2, 4], [1, 2], 3375866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par) 3385866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 3390e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 1).eval() 34003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd = rnd_par.eval() 34103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd, val) 3425866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self.assertEqual([dtypes.int32] * 2, [v.dtype.base_dtype for v in vs]) 34303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self._TestSaveSpec(vs, ["2 4 0,2:0,2", "2 4 0,2:2,2"]) 34403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 345170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower def _testNameHelper(self, use_resource=False): 34603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 3475866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par = constant_op.constant([[1, 2, 3, 4], [5, 6, 7, 8]]) 348170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower with variable_scope.variable_scope("hi", use_resource=use_resource): 3495866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs1 = partitioned_variables.create_partitioned_variables([2, 4], [1, 2], 3505866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par) 3515866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs2 = partitioned_variables.create_partitioned_variables([2, 4], [1, 2], 3525866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par) 3535866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 35403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var1_name = vs1[0]._save_slice_info.full_name 35503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var2_name = vs2[0]._save_slice_info.full_name 35603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("hi/PartitionedVariable", var1_name) 35703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("hi/PartitionedVariable_1", var2_name) 35803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_0:0", vs1[0].name) 35903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_1:0", vs1[1].name) 36003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_0:0", vs2[0].name) 36103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_1:0", vs2[1].name) 36203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Test same variable. 36303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 3645866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par = constant_op.constant([[1, 2, 3, 4], [5, 6, 7, 8]]) 365170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower with variable_scope.variable_scope( 366170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower "hola", use_resource=use_resource) as vs: 3675866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs1 = partitioned_variables.create_partitioned_variables( 3685866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [2, 4], [1, 2], rnd_par, dtype=dtypes.int32) 369170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower with variable_scope.variable_scope( 370170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower vs, reuse=True, use_resource=use_resource): 3715866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs2 = partitioned_variables.create_partitioned_variables( 3725866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [2, 4], [1, 2], rnd_par, dtype=dtypes.int32) 3735866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 37403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var1_name = vs1[0]._save_slice_info.full_name 37503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var2_name = vs2[0]._save_slice_info.full_name 37603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("hola/PartitionedVariable", var1_name) 37703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("hola/PartitionedVariable", var2_name) 37803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_0:0", vs1[0].name) 37903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_1:0", vs1[1].name) 38003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_0:0", vs2[0].name) 38103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_1:0", vs2[1].name) 38203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Test name_scope 38303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 3845866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par = constant_op.constant([[1, 2, 3, 4], [5, 6, 7, 8]]) 3855866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with ops.name_scope("ola"): 3865866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs1 = partitioned_variables.create_partitioned_variables([2, 4], [1, 2], 3875866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par) 3885866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs2 = partitioned_variables.create_partitioned_variables([2, 4], [1, 2], 3895866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd_par) 3905866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 39103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var1_name = vs1[0]._save_slice_info.full_name 39203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var2_name = vs2[0]._save_slice_info.full_name 39303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Currently, the name scope 'ola' has no effect. 39403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("PartitionedVariable", var1_name) 39503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual("PartitionedVariable_1", var2_name) 39603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_0:0", vs1[0].name) 39703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var1_name + "/part_1:0", vs1[1].name) 39803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_0:0", vs2[0].name) 39903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertEqual(var2_name + "/part_1:0", vs2[1].name) 40003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 401170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower def testName(self): 402170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower self._testNameHelper(use_resource=False) 403170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower 404170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower def testResourceName(self): 405170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower self._testNameHelper(use_resource=True) 406170e97418ede711b5c5ef7f848e2608baea452edA. Unique TensorFlower 40703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testRandomInitValue(self): 40803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 4095866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd = variables.Variable(random_ops.random_uniform([200, 40])) 4105866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables( 41103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd.get_shape(), [1, 10], rnd.initialized_value()) 4125866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 4130e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 1).eval() 41403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd = rnd.eval() 41503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd, val) 4165866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self.assertEqual([dtypes.float32] * 10, [v.dtype.base_dtype for v in vs]) 4175866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._TestSaveSpec(vs, [ 4185866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "200 40 0,200:0,4", "200 40 0,200:4,4", "200 40 0,200:8,4", 4195866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "200 40 0,200:12,4", "200 40 0,200:16,4", "200 40 0,200:20,4", 4205866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "200 40 0,200:24,4", "200 40 0,200:28,4", "200 40 0,200:32,4", 4215866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "200 40 0,200:36,4" 4225866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ]) 42303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 42403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testRandomInitUnevenPartitions(self): 42503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 4265866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd = variables.Variable( 427aee7f95a027accc94f1f9130f0cfaecd9399bc1dYifei Feng random_ops.random_uniform([20, 43], dtype=dtypes.float64)) 42803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower var_lists = [ 4295866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 4305866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd.get_shape(), [1, i], rnd.initialized_value()) 4315866e065bc95c1d7de8a27413b368016941889a6Justine Tunney for i in xrange(1, 10) 4325866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 4335866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 43403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd_val = rnd.eval() 43503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Only check the slice save specs for the first 5 tf. 43603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower save_specs = [ 43703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # One slice 43803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower ["20 43 0,20:0,43"], 43903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Two slices 4405866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ["20 43 0,20:0,22", "20 43 0,20:22,21"], 44103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Three slices 4425866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ["20 43 0,20:0,15", "20 43 0,20:15,14", "20 43 0,20:29,14"], 44303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Four slices 4445866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [ 4455866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "20 43 0,20:0,11", "20 43 0,20:11,11", "20 43 0,20:22,11", 4465866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "20 43 0,20:33,10" 4475866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ], 44803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Five slices 4495866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [ 4505866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "20 43 0,20:0,9", "20 43 0,20:9,9", "20 43 0,20:18,9", 4515866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "20 43 0,20:27,8", "20 43 0,20:35,8" 4525866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 4535866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 45403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower for i, vs in enumerate(var_lists): 4550e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower var_val = array_ops.concat(vs, 1).eval() 45603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd_val, var_val) 4575866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self.assertEqual([dtypes.float64] * len(vs), 4585866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [v.dtype.base_dtype for v in vs]) 45903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower if i < len(save_specs): 46003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self._TestSaveSpec(vs, save_specs[i]) 46103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 46203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testDegenerate(self): 46303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 4645866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd = variables.Variable(random_ops.random_uniform([10, 43])) 4655866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables( 46603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd.get_shape(), [1, 1], rnd.initialized_value()) 4675866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 4680e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 0).eval() 46903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd = rnd.eval() 47003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd, val) 47103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self._TestSaveSpec(vs, ["10 43 0,10:0,43"]) 47203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 47303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testSliceSizeOne(self): 47403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 4755866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd = variables.Variable(random_ops.random_uniform([10, 43])) 4765866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables( 47703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd.get_shape(), [10, 1], rnd.initialized_value()) 4785866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 4790e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 0).eval() 48003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower rnd = rnd.eval() 48103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(rnd, val) 4825866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._TestSaveSpec(vs, [ 4835866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "10 43 0,1:0,43", "10 43 1,1:0,43", "10 43 2,1:0,43", 4845866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "10 43 3,1:0,43", "10 43 4,1:0,43", "10 43 5,1:0,43", 4855866e065bc95c1d7de8a27413b368016941889a6Justine Tunney "10 43 6,1:0,43", "10 43 7,1:0,43", "10 43 8,1:0,43", "10 43 9,1:0,43" 4865866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ]) 48703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 48803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testIotaInitializer(self): 48903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose([0., 1., 2., 3.], _IotaInitializer([4])) 49003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose([[0., 1.], [0., 10.], [0., 100.], [0., 1000.]], 49103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower _IotaInitializer([4, 2])) 49203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 4935866e065bc95c1d7de8a27413b368016941889a6Justine Tunney vs = partitioned_variables.create_partitioned_variables([13, 5], [3, 1], 4945866e065bc95c1d7de8a27413b368016941889a6Justine Tunney _IotaInitializer) 4955866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 49603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower slice0 = _IotaInitializer([5, 5]) 49703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower slice1 = _IotaInitializer([4, 5]) 49803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower slice2 = _IotaInitializer([4, 5]) 4990e226af7eed5e2764aa8acb825af4cd3e06d2452A. Unique TensorFlower val = array_ops.concat(vs, 0).eval() 50003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(slice0 + slice1 + slice2, val) 5015866e065bc95c1d7de8a27413b368016941889a6Justine Tunney self._TestSaveSpec(vs, ["13 5 0,5:0,5", "13 5 5,4:0,5", "13 5 9,4:0,5"]) 50203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 50303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testRandomInitializer(self): 50403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Sanity check that the slices uses a different seed when using a random 50503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # initializer function. 50603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 5075866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var0, var1 = partitioned_variables.create_partitioned_variables( 5085866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [20, 12], [1, 2], init_ops.random_uniform_initializer()) 5095866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 51003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower val0, val1 = var0.eval().flatten(), var1.eval().flatten() 51103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertTrue(np.linalg.norm(val0 - val1) > 1e-6) 51203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # Negative test that proves that slices have the same values if 51303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower # the random initializer uses a seed. 51403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 5155866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var0, var1 = partitioned_variables.create_partitioned_variables( 5165866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [20, 12], [1, 2], init_ops.random_uniform_initializer(seed=201)) 5175866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 51803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower val0, val1 = var0.eval().flatten(), var1.eval().flatten() 51903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower self.assertAllClose(val0, val1) 52003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 52103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower def testSomeErrors(self): 52203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.test_session(): 5235866e065bc95c1d7de8a27413b368016941889a6Justine Tunney rnd = variables.Variable(random_ops.random_uniform([10, 43])) 52403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5255866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 5265866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [10], [1, 1], rnd.initialized_value()) 52703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5285866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 5295866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [10, 20], [1], rnd.initialized_value()) 53003869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5315866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 5325866e065bc95c1d7de8a27413b368016941889a6Justine Tunney [10, 43], [1], rnd.initialized_value()) 53303869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5345866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 53503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower [10, 43], [1, 2, 3], rnd.initialized_value()) 53603869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5375866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 53803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower [10, 43], [11, 1], rnd.initialized_value()) 53903869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5405866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 54103869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower [10, 43], [20, 1], rnd.initialized_value()) 54203869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower with self.assertRaises(ValueError): 5435866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioned_variables.create_partitioned_variables( 54403869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower [10, 43], [1, 50], rnd.initialized_value()) 54503869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 546dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower def testControlDepsNone(self): 547dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower with self.test_session() as session: 5485866e065bc95c1d7de8a27413b368016941889a6Justine Tunney c = constant_op.constant(1.0) 5495866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with ops.control_dependencies([c]): 550dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower # d get the control dependency. 5515866e065bc95c1d7de8a27413b368016941889a6Justine Tunney d = constant_op.constant(2.0) 552dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower # Partitioned variables do not. 5535866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_x = variable_scope.get_variable( 554dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower "x", 555cfb2280d3f6ced298681bd1141479a59a06abde8Olivia Nordquist shape=[2], 5565866e065bc95c1d7de8a27413b368016941889a6Justine Tunney initializer=init_ops.ones_initializer(), 5575866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioner=partitioned_variables.variable_axis_size_partitioner(4)) 558dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower 559dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower ops_before_read = session.graph.get_operations() 560dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower var_x.as_tensor() # Caches the ops for subsequent reads. 5615866e065bc95c1d7de8a27413b368016941889a6Justine Tunney reading_ops = [ 5625866e065bc95c1d7de8a27413b368016941889a6Justine Tunney op for op in session.graph.get_operations() 5635866e065bc95c1d7de8a27413b368016941889a6Justine Tunney if op not in ops_before_read 5645866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 565dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower 566dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower self.assertEqual([c.op], d.op.control_inputs) 567dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower # Tests that no control dependencies are added to reading a partitioned 568dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower # variable which is similar to reading a variable. 569dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower for op in reading_ops: 570dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower self.assertEqual([], op.control_inputs) 571dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower 572dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower def testConcat(self): 573dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower with self.test_session() as session: 5745866e065bc95c1d7de8a27413b368016941889a6Justine Tunney var_x = variable_scope.get_variable( 575dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower "x", 5765866e065bc95c1d7de8a27413b368016941889a6Justine Tunney initializer=constant_op.constant([1., 2.]), 5775866e065bc95c1d7de8a27413b368016941889a6Justine Tunney partitioner=partitioned_variables.variable_axis_size_partitioner(4)) 578dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower 5795866e065bc95c1d7de8a27413b368016941889a6Justine Tunney c = constant_op.constant(1.0) 5805866e065bc95c1d7de8a27413b368016941889a6Justine Tunney with ops.control_dependencies([c]): 581dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower ops_before_concat = session.graph.get_operations() 5826de77d7f296c2fce09afa0f86c5237a5d42be153Eugene Brevdo value = var_x._concat() # pylint: disable=protected-access 5835866e065bc95c1d7de8a27413b368016941889a6Justine Tunney concat_ops = [ 5845866e065bc95c1d7de8a27413b368016941889a6Justine Tunney op for op in session.graph.get_operations() 5855866e065bc95c1d7de8a27413b368016941889a6Justine Tunney if op not in ops_before_concat 5865866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 5875866e065bc95c1d7de8a27413b368016941889a6Justine Tunney 5885866e065bc95c1d7de8a27413b368016941889a6Justine Tunney concat_control_inputs = [ 5895866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ci for op in concat_ops for ci in op.control_inputs 5905866e065bc95c1d7de8a27413b368016941889a6Justine Tunney ] 591dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower self.assertTrue( 592dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower c.op in concat_control_inputs, 5936de77d7f296c2fce09afa0f86c5237a5d42be153Eugene Brevdo "var_x._concat() should get control dependencies from its scope.") 5945866e065bc95c1d7de8a27413b368016941889a6Justine Tunney variables.global_variables_initializer().run() 595dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower self.assertAllClose(value.eval(), var_x.as_tensor().eval()) 596dd56e71952b73f4ab1158f8343812cbccd5c1c8dA. Unique TensorFlower 59703869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlower 59803869e6e9cfac85d3e0f87ded01f4dd8de10ed67A. Unique TensorFlowerif __name__ == "__main__": 5995866e065bc95c1d7de8a27413b368016941889a6Justine Tunney test.main() 600