1# Copyright 2019 The TensorFlow Authors. All Rights Reserved. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# ============================================================================== 15"""Test configs for prelu.""" 16from __future__ import absolute_import 17from __future__ import division 18from __future__ import print_function 19 20import numpy as np 21import tensorflow.compat.v1 as tf 22from tensorflow.lite.testing.zip_test_utils import create_tensor_data 23from tensorflow.lite.testing.zip_test_utils import make_zip_of_tests 24from tensorflow.lite.testing.zip_test_utils import register_make_test_function 25 26 27@register_make_test_function() 28def make_prelu_tests(options): 29 """Make a set of tests to do PReLU.""" 30 31 test_parameters = [ 32 { 33 # The canonical case for image processing is having a 4D `input` 34 # (NHWC)and `shared_axes`=[1, 2], so the alpha parameter is per 35 # channel. 36 "input_shape": [[1, 10, 10, 3], [3, 3, 3, 3]], 37 "shared_axes": [[1, 2], [1]], 38 "fully_quantize": [False], 39 "input_range": [(-10, 10)], 40 }, 41 { 42 # 2D-3D example. Share the 2nd axis. 43 "input_shape": [[20, 20], [20, 20, 20]], 44 "shared_axes": [[1]], 45 "fully_quantize": [False], 46 "input_range": [(-10, 10)], 47 }, 48 # Quantized cases. 49 { 50 # The canonical case for image processing is having a 4D `input` 51 # (NHWC)and `shared_axes`=[1, 2], so the alpha parameter is per 52 # channel. 53 "input_shape": [[1, 10, 10, 3], [3, 3, 3, 3]], 54 "shared_axes": [[1, 2], [1]], 55 "fully_quantize": [True], 56 "input_range": [(-10, 10)], 57 }, 58 { 59 # 2D-3D example. Share the 2nd axis. 60 "input_shape": [[20, 20], [20, 20, 20]], 61 "shared_axes": [[1]], 62 "fully_quantize": [True], 63 "input_range": [(-10, 10)], 64 }, 65 ] 66 67 def build_graph(parameters): 68 """Build the graph for the test case.""" 69 70 input_tensor = tf.compat.v1.placeholder( 71 dtype=tf.float32, name="input", shape=parameters["input_shape"]) 72 prelu = tf.keras.layers.PReLU(shared_axes=parameters["shared_axes"]) 73 out = prelu(input_tensor) 74 return [input_tensor], [out] 75 76 def build_inputs(parameters, sess, inputs, outputs): 77 """Build the inputs for the test case.""" 78 79 input_shape = parameters["input_shape"] 80 input_values = create_tensor_data( 81 np.float32, input_shape, min_value=-10, max_value=10) 82 shared_axes = parameters["shared_axes"] 83 84 alpha_shape = [] 85 for dim in range(1, len(input_shape)): 86 alpha_shape.append(1 if dim in shared_axes else input_shape[dim]) 87 88 alpha_values = create_tensor_data( 89 np.float32, alpha_shape, min_value=-5, max_value=5) 90 91 # There should be only 1 trainable variable tensor. 92 variables = tf.compat.v1.all_variables() 93 assert len(variables) == 1 94 sess.run(variables[0].assign(alpha_values)) 95 96 return [input_values], sess.run( 97 outputs, feed_dict=dict(zip(inputs, [input_values]))) 98 99 make_zip_of_tests( 100 options, 101 test_parameters, 102 build_graph, 103 build_inputs, 104 use_frozen_graph=True) 105