# Copyright 2016 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. # ============================================================================== """Tests for embedding layers.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import numpy as np from tensorflow.python import keras from tensorflow.python.eager import backprop from tensorflow.python.framework import test_util as tf_test_util from tensorflow.python.keras import testing_utils from tensorflow.python.platform import test from tensorflow.python.training import adagrad class EmbeddingTest(test.TestCase): @tf_test_util.run_in_graph_and_eager_modes(use_gpu=False) def test_embedding(self): testing_utils.layer_test( keras.layers.Embedding, kwargs={'output_dim': 4, 'input_dim': 10, 'input_length': 2}, input_shape=(3, 2), input_dtype='int32', expected_output_dtype='float32') testing_utils.layer_test( keras.layers.Embedding, kwargs={'output_dim': 4, 'input_dim': 10, 'mask_zero': True}, input_shape=(3, 2), input_dtype='int32', expected_output_dtype='float32') testing_utils.layer_test( keras.layers.Embedding, kwargs={'output_dim': 4, 'input_dim': 10, 'mask_zero': True}, input_shape=(3, 4, 2), input_dtype='int32', expected_output_dtype='float32') testing_utils.layer_test( keras.layers.Embedding, kwargs={'output_dim': 4, 'input_dim': 10, 'mask_zero': True, 'input_length': (None, 2)}, input_shape=(3, 4, 2), input_dtype='int32', expected_output_dtype='float32') def test_embedding_correctness(self): with self.cached_session(): layer = keras.layers.Embedding(output_dim=2, input_dim=2) layer.build((None, 2)) matrix = np.array([[1, 1], [2, 2]]) layer.set_weights([matrix]) inputs = keras.backend.constant([[0, 1, 0]], dtype='int32') outputs = keras.backend.eval(layer(inputs)) self.assertAllClose(outputs, [[[1, 1], [2, 2], [1, 1]]]) @tf_test_util.run_in_graph_and_eager_modes() def test_eager_gpu_cpu(self): l = keras.layers.Embedding(output_dim=2, input_dim=2) l.build((None, 2)) inputs = keras.backend.constant([[0, 1, 0]], dtype='int32') with backprop.GradientTape() as tape: output = l(inputs) gs = tape.gradient(output, l.weights) opt = adagrad.AdagradOptimizer(0.1) opt.apply_gradients(zip(gs, l.weights)) self.assertAllEqual(len(gs), 1) if __name__ == '__main__': test.main()