Python tensorflow.python.ops.nn_ops.bias_add() Examples
The following are 30
code examples of tensorflow.python.ops.nn_ops.bias_add().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
tensorflow.python.ops.nn_ops
, or try the search function
.
Example #1
Source File: nn_impl.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def relu_layer(x, weights, biases, name=None): """Computes Relu(x * weight + biases). Args: x: a 2D tensor. Dimensions typically: batch, in_units weights: a 2D tensor. Dimensions typically: in_units, out_units biases: a 1D tensor. Dimensions: out_units name: A name for the operation (optional). If not specified "nn_relu_layer" is used. Returns: A 2-D Tensor computing relu(matmul(x, weights) + biases). Dimensions typically: batch, out_units. """ with ops.name_scope(name, "relu_layer", [x, weights, biases]) as name: x = ops.convert_to_tensor(x, name="x") weights = ops.convert_to_tensor(weights, name="weights") biases = ops.convert_to_tensor(biases, name="biases") xw_plus_b = nn_ops.bias_add(math_ops.matmul(x, weights), biases) return nn_ops.relu(xw_plus_b, name=name)
Example #2
Source File: test_forward.py From incubator-tvm with Apache License 2.0 | 6 votes |
def _test_biasadd(tensor_in_sizes, data_format): """ One iteration of biasadd with given shapes and attributes """ total_size_1 = 1 for s in tensor_in_sizes: total_size_1 *= s tensor_bias_sizes = [tensor_in_sizes[1] ] if data_format == 'NCHW' else [tensor_in_sizes[3]] total_size_2 = tensor_bias_sizes[0] # Initializes the input tensor with array containing incrementing # numbers from 1. data_array = [f * 1.0 for f in range(1, total_size_1 + 1)] bias_array = [f * 1.0 for f in range(1, total_size_2 + 1)] with tf.Graph().as_default(): in_data = array_ops.placeholder(shape=tensor_in_sizes, dtype='float32') in_bias = constant_op.constant( bias_array, shape=tensor_bias_sizes, dtype='float32') nn_ops.bias_add(in_data, in_bias, data_format=data_format) compare_tf_with_tvm(np.reshape(data_array, tensor_in_sizes).astype('float32'), 'Placeholder:0', 'BiasAdd:0')
Example #3
Source File: test_patch_bias_add.py From framework-determinism with Apache License 2.0 | 6 votes |
def testDeterministicGradients(self): with self.session(force_gpu=True): # There are problems with using force_gpu=True and cached_session with # both eager mode and graph mode in the same test. Using a non-cached # session and putting everything inside the same session context is # a compromise. for op_binding in (tf.nn.bias_add, nn.bias_add, nn_ops.bias_add): for data_layout in ('channels_first', 'channels_last'): # With the selected layer configuration, at least in TensorFlow # version 2.0, when data_layout='channels_last', bias_add operates # deterministically by default. I don't know if this is true for # all layer configurations. These cases are still being tested here, # for completeness. for data_rank in (1, 2, 3): for data_type in (dtypes.float16, dtypes.float32, dtypes.float64): self._testDeterministicGradientsCase(op_binding, data_layout, data_rank, data_type)
Example #4
Source File: test_forward.py From incubator-tvm with Apache License 2.0 | 6 votes |
def test_forward_bias_add(): """test Op BiasAdd""" def check_bias_add(lh_shpae, rh_shape, dtype): tf.reset_default_graph() lh_data = np.random.uniform(size=lh_shpae).astype(dtype) rh_data = np.random.uniform(size=rh_shape).astype(dtype) with tf.Graph().as_default(): lft_data = tf.placeholder(dtype, name="lft_data") rgt_data = tf.placeholder(dtype, name="rgt_data") tf.nn.bias_add(lft_data, rgt_data, name="BiasAdd") compare_tf_with_tvm([lh_data, rh_data], [ 'lft_data:0', 'rgt_data:0'], 'BiasAdd:0') check_bias_add((10, 8, 16, 32), (32,), dtype="int32") check_bias_add((10, 20), (20,), dtype="float32") ####################################################################### # Split # -----
Example #5
Source File: nn.py From deep_image_model with Apache License 2.0 | 6 votes |
def relu_layer(x, weights, biases, name=None): """Computes Relu(x * weight + biases). Args: x: a 2D tensor. Dimensions typically: batch, in_units weights: a 2D tensor. Dimensions typically: in_units, out_units biases: a 1D tensor. Dimensions: out_units name: A name for the operation (optional). If not specified "nn_relu_layer" is used. Returns: A 2-D Tensor computing relu(matmul(x, weights) + biases). Dimensions typically: batch, out_units. """ with ops.name_scope(name, "relu_layer", [x, weights, biases]) as name: x = ops.convert_to_tensor(x, name="x") weights = ops.convert_to_tensor(weights, name="weights") biases = ops.convert_to_tensor(biases, name="biases") xw_plus_b = nn_ops.bias_add(math_ops.matmul(x, weights), biases) return nn_ops.relu(xw_plus_b, name=name)
Example #6
Source File: utils.py From DeepCTR with Apache License 2.0 | 6 votes |
def __call__(self, args): if not self._is_sequence: args = [args] if len(args) == 1: res = math_ops.matmul(args[0], self._weights) else: res = math_ops.matmul(array_ops.concat(args, 1), self._weights) if self._build_bias: res = nn_ops.bias_add(res, self._biases) return res
Example #7
Source File: core_rnn_cell.py From Multiview2Novelview with MIT License | 6 votes |
def __call__(self, args): if not self._is_sequence: args = [args] if len(args) == 1: res = math_ops.matmul(args[0], self._weights) else: # Explicitly creating a one for a minor performance improvement. one = constant_op.constant(1, dtype=dtypes.int32) res = math_ops.matmul(array_ops.concat(args, one), self._weights) if self._build_bias: res = nn_ops.bias_add(res, self._biases) return res # TODO(xpan): Remove this function in a follow up.
Example #8
Source File: ind_rnn_cell.py From indrnn with Apache License 2.0 | 6 votes |
def call(self, inputs, state): """Run one time step of the IndRNN. Calculates the output and new hidden state using the IndRNN equation `output = new_state = act(W * input + u (*) state + b)` where `*` is the matrix multiplication and `(*)` is the Hadamard product. Args: inputs: Tensor, 2-D tensor of shape `[batch, num_units]`. state: Tensor, 2-D tensor of shape `[batch, num_units]` containing the previous hidden state. Returns: A tuple containing the output and new hidden state. Both are the same 2-D tensor of shape `[batch, num_units]`. """ gate_inputs = math_ops.matmul(inputs, self._input_kernel) recurrent_update = math_ops.multiply(state, self._recurrent_kernel) gate_inputs = math_ops.add(gate_inputs, recurrent_update) gate_inputs = nn_ops.bias_add(gate_inputs, self._bias) output = self._activation(gate_inputs) return output, output
Example #9
Source File: nn_impl.py From keras-lambda with MIT License | 6 votes |
def relu_layer(x, weights, biases, name=None): """Computes Relu(x * weight + biases). Args: x: a 2D tensor. Dimensions typically: batch, in_units weights: a 2D tensor. Dimensions typically: in_units, out_units biases: a 1D tensor. Dimensions: out_units name: A name for the operation (optional). If not specified "nn_relu_layer" is used. Returns: A 2-D Tensor computing relu(matmul(x, weights) + biases). Dimensions typically: batch, out_units. """ with ops.name_scope(name, "relu_layer", [x, weights, biases]) as name: x = ops.convert_to_tensor(x, name="x") weights = ops.convert_to_tensor(weights, name="weights") biases = ops.convert_to_tensor(biases, name="biases") xw_plus_b = nn_ops.bias_add(math_ops.matmul(x, weights), biases) return nn_ops.relu(xw_plus_b, name=name)
Example #10
Source File: nn_impl.py From lambda-packs with MIT License | 6 votes |
def relu_layer(x, weights, biases, name=None): """Computes Relu(x * weight + biases). Args: x: a 2D tensor. Dimensions typically: batch, in_units weights: a 2D tensor. Dimensions typically: in_units, out_units biases: a 1D tensor. Dimensions: out_units name: A name for the operation (optional). If not specified "nn_relu_layer" is used. Returns: A 2-D Tensor computing relu(matmul(x, weights) + biases). Dimensions typically: batch, out_units. """ with ops.name_scope(name, "relu_layer", [x, weights, biases]) as name: x = ops.convert_to_tensor(x, name="x") weights = ops.convert_to_tensor(weights, name="weights") biases = ops.convert_to_tensor(biases, name="biases") xw_plus_b = nn_ops.bias_add(math_ops.matmul(x, weights), biases) return nn_ops.relu(xw_plus_b, name=name)
Example #11
Source File: nn_impl.py From auto-alt-text-lambda-api with MIT License | 6 votes |
def relu_layer(x, weights, biases, name=None): """Computes Relu(x * weight + biases). Args: x: a 2D tensor. Dimensions typically: batch, in_units weights: a 2D tensor. Dimensions typically: in_units, out_units biases: a 1D tensor. Dimensions: out_units name: A name for the operation (optional). If not specified "nn_relu_layer" is used. Returns: A 2-D Tensor computing relu(matmul(x, weights) + biases). Dimensions typically: batch, out_units. """ with ops.name_scope(name, "relu_layer", [x, weights, biases]) as name: x = ops.convert_to_tensor(x, name="x") weights = ops.convert_to_tensor(weights, name="weights") biases = ops.convert_to_tensor(biases, name="biases") xw_plus_b = nn_ops.bias_add(math_ops.matmul(x, weights), biases) return nn_ops.relu(xw_plus_b, name=name)
Example #12
Source File: rnn_ops.py From video_prediction with MIT License | 5 votes |
def _conv2d(self, inputs): output_filters = 4 * self._filters input_shape = inputs.get_shape().as_list() kernel_shape = list(self._kernel_size) + [input_shape[-1], output_filters] kernel = vs.get_variable("kernel", kernel_shape, dtype=dtypes.float32, initializer=init_ops.truncated_normal_initializer(stddev=0.02)) outputs = nn_ops.conv2d(inputs, kernel, [1] * 4, padding='SAME') if not self._normalizer_fn: bias = vs.get_variable('bias', [output_filters], dtype=dtypes.float32, initializer=init_ops.zeros_initializer()) outputs = nn_ops.bias_add(outputs, bias) return outputs
Example #13
Source File: basic_rnn_cell.py From LSTMCell with MIT License | 5 votes |
def _linear(x, weight_shape, bias=True, scope=None, bias_ini=0.0): """ linear projection (weight_shape: input size, output size) """ with vs.variable_scope(scope or "linear"): w = vs.get_variable("kernel", shape=weight_shape) x = math_ops.matmul(x, w) if bias: b = vs.get_variable("bias", initializer=[bias_ini] * weight_shape[-1]) return nn_ops.bias_add(x, b) else: return x
Example #14
Source File: modrelu.py From rotational-unit-of-memory with MIT License | 5 votes |
def modrelu(z, b, comp): if comp: z_norm = math_ops.sqrt(math_ops.square(math_ops.real(z)) + math_ops.square(math_ops.imag(z))) + 0.00001 step1 = nn_ops.bias_add(z_norm, b) step2 = math_ops.complex(nn_ops.relu(step1), array_ops.zeros_like(z_norm)) step3 = z/math_ops.complex(z_norm, array_ops.zeros_like(z_norm)) else: z_norm = math_ops.abs(z) + 0.00001 step1 = nn_ops.bias_add(z_norm, b) step2 = nn_ops.relu(step1) step3 = math_ops.sign(z) return math_ops.multiply(step3, step2)
Example #15
Source File: layers.py From QGforQA with MIT License | 5 votes |
def optimized_trilinear_for_attention(args, c_maxlen, q_maxlen, input_keep_prob=1.0, scope='efficient_trilinear', bias_initializer=tf.zeros_initializer(), kernel_initializer=initializer()): assert len(args) == 2, "just use for computing attention with two input" arg0_shape = args[0].get_shape().as_list() arg1_shape = args[1].get_shape().as_list() if len(arg0_shape) != 3 or len(arg1_shape) != 3: raise ValueError("`args` must be 3 dims (batch_size, len, dimension)") if arg0_shape[2] != arg1_shape[2]: raise ValueError("the last dimension of `args` must equal") arg_size = arg0_shape[2] dtype = args[0].dtype droped_args = [tf.nn.dropout(arg, input_keep_prob) for arg in args] with tf.variable_scope(scope): weights4arg0 = tf.get_variable( "linear_kernel4arg0", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4arg1 = tf.get_variable( "linear_kernel4arg1", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4mlu = tf.get_variable( "linear_kernel4mul", [1, 1, arg_size], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) biases = tf.get_variable( "linear_bias", [1], dtype=dtype, regularizer=regularizer, initializer=bias_initializer) subres0 = tf.tile(dot(droped_args[0], weights4arg0), [1, 1, q_maxlen]) subres1 = tf.tile(tf.transpose(dot(droped_args[1], weights4arg1), perm=(0, 2, 1)), [1, c_maxlen, 1]) subres2 = batch_dot(droped_args[0] * weights4mlu, tf.transpose(droped_args[1], perm=(0, 2, 1))) res = subres0 + subres1 + subres2 # nn_ops.bias_add(res, biases) return res
Example #16
Source File: rnn_ops.py From video_prediction with MIT License | 5 votes |
def _conv2d(self, inputs, output_filters, bias_initializer): input_shape = inputs.get_shape().as_list() kernel_shape = list(self._kernel_size) + [input_shape[-1], output_filters] kernel = vs.get_variable("kernel", kernel_shape, dtype=dtypes.float32, initializer=init_ops.truncated_normal_initializer(stddev=0.02)) outputs = nn_ops.conv2d(inputs, kernel, [1] * 4, padding='SAME') if not self._normalizer_fn: bias = vs.get_variable('bias', [output_filters], dtype=dtypes.float32, initializer=bias_initializer) outputs = nn_ops.bias_add(outputs, bias) return outputs
Example #17
Source File: basic_lstm_cell.py From LSTMCell with MIT License | 5 votes |
def _linear(x, weight_shape, bias=True, scope=None): """ linear projection (weight_shape: input size, output size) """ with vs.variable_scope(scope or "linear"): w = vs.get_variable("kernel", shape=weight_shape) x = math_ops.matmul(x, w) if bias: b = vs.get_variable("bias", initializer=[0.0] * weight_shape[-1]) return nn_ops.bias_add(x, b) else: return x
Example #18
Source File: hypernets_cell.py From LSTMCell with MIT License | 5 votes |
def _linear(x, weight_shape, bias=True, scope=None): """ linear projection (weight_shape: input size, output size) """ with vs.variable_scope(scope or "linear"): w = vs.get_variable("kernel", shape=weight_shape) x = math_ops.matmul(x, w) if bias: b = vs.get_variable("bias", initializer=[0.0] * weight_shape[-1]) return nn_ops.bias_add(x, b) else: return x
Example #19
Source File: test_forward.py From incubator-tvm with Apache License 2.0 | 5 votes |
def _test_fully_connected(tensor_in_sizes, filter_in_sizes, bias_in_size=None): """ One iteration of fully connected """ total_size_1 = 1 total_size_2 = 1 for s in tensor_in_sizes: total_size_1 *= s for s in filter_in_sizes: total_size_2 *= s # Initializes the input tensor with array containing incrementing # numbers from 1. data_array = [f * 1.0 for f in range(1, total_size_1 + 1)] filter_array = [f * 1.0 for f in range(1, total_size_2 + 1)] assert int(total_size_1 / tensor_in_sizes[0]) == filter_in_sizes[0], \ "input size and filter size are mismatched" with tf.Graph().as_default(): in_data = array_ops.placeholder(shape=tensor_in_sizes, dtype='float32') in_filter = constant_op.constant(filter_array, shape=filter_in_sizes, dtype='float32') # reshape N H W C into N H*W*C in_data_reshape = array_ops.reshape(in_data, [tensor_in_sizes[0], -1]) out = math_ops.mat_mul(in_data_reshape, in_filter) # if we have bias if bias_in_size: assert bias_in_size[0] == filter_in_sizes[1], "bias and filter size are mismatched" bias_array = [f * 1.0 for f in range(1, bias_in_size[0] + 1)] in_bias = constant_op.constant(bias_array, shape=bias_in_size, dtype='float32') out = nn_ops.bias_add(out, in_bias) data_array = np.reshape(data_array, tensor_in_sizes).astype('float32') compare_tflite_with_tvm(data_array, 'Placeholder:0', [in_data], [out])
Example #20
Source File: gradients_test.py From deep_image_model with Apache License 2.0 | 5 votes |
def testGradients(self): with ops.Graph().as_default(): inp = constant(1.0, shape=[32, 100], name="in") w = constant(1.0, shape=[100, 10], name="w") b = constant(1.0, shape=[10], name="b") xw = math_ops.matmul(inp, w, name="xw") h = bias_add(xw, b, name="h") w_grad = gradients.gradients(h, w)[0] self.assertEquals("MatMul", w_grad.op.type) self.assertEquals(w_grad.op._original_op, xw.op) self.assertTrue(w_grad.op.get_attr("transpose_a")) self.assertFalse(w_grad.op.get_attr("transpose_b"))
Example #21
Source File: modrelu.py From AmusingPythonCodes with MIT License | 5 votes |
def modrelu(z, b, comp): if comp: z_norm = math_ops.sqrt(math_ops.square(math_ops.real(z)) + math_ops.square(math_ops.imag(z))) + 0.00001 step1 = nn_ops.bias_add(z_norm, b) step2 = math_ops.complex(nn_ops.relu(step1), array_ops.zeros_like(z_norm)) step3 = z/math_ops.complex(z_norm, array_ops.zeros_like(z_norm)) else: z_norm = math_ops.abs(z) + 0.00001 step1 = nn_ops.bias_add(z_norm, b) step2 = nn_ops.relu(step1) step3 = math_ops.sign(z) return math_ops.multiply(step3, step2)
Example #22
Source File: indRNN.py From Text-Classification with Apache License 2.0 | 5 votes |
def call(self, inputs, state): '''output = new state = activation(W * x + U (*) h_t-1 + b)''' gate_inputs = math_ops.matmul(inputs, self._input_kernel) # (*) state_update = math_ops.multiply(state, self._recurrent_kernel) gate_inputs = math_ops.add(gate_inputs, state_update) gate_inputs = nn_ops.bias_add(gate_inputs, self._bias) output = self._activation(gate_inputs) return output, output
Example #23
Source File: test_patch_bias_add.py From framework-determinism with Apache License 2.0 | 5 votes |
def _testBiasNCHW(self, np_inputs, np_bias, use_gpu): np_val = self._npBias(np_inputs, np_bias) np_inputs = self._NHWCToNCHW(np_inputs) with self.cached_session(use_gpu=use_gpu): tf_val = self.evaluate(nn_ops.bias_add(np_inputs, np_bias, data_format="NCHW")) tf_val = self._NCHWToNHWC(tf_val) self.assertAllCloseAccordingToType(self._AtLeast3d(np_val), tf_val)
Example #24
Source File: test_patch_bias_add.py From framework-determinism with Apache License 2.0 | 5 votes |
def _testBias(self, np_inputs, np_bias, use_gpu=False): np_val = self._npBias(np_inputs, np_bias) with self.cached_session(use_gpu=use_gpu): tf_val = self.evaluate(nn_ops.bias_add(np_inputs, np_bias)) self.assertAllCloseAccordingToType(np_val, tf_val)
Example #25
Source File: patch.py From framework-determinism with Apache License 2.0 | 5 votes |
def _patch_bias_add(): tf.nn.bias_add = _new_bias_add_1_14 # access via public API nn.bias_add = _new_bias_add_1_14 # called from tf.keras.layers.convolutional.Conv nn_ops.bias_add = _new_bias_add_1_14 # called from tests # The original, pre-patched method can be viewed at # https://github.com/tensorflow/tensorflow/blob/v1.14.0/tensorflow/python/ops/nn_ops.py#L2628
Example #26
Source File: layers.py From QANet with MIT License | 5 votes |
def optimized_trilinear_for_attention(args, c_maxlen, q_maxlen, input_keep_prob=1.0, scope='efficient_trilinear', bias_initializer=tf.zeros_initializer(), kernel_initializer=initializer()): assert len(args) == 2, "just use for computing attention with two input" arg0_shape = args[0].get_shape().as_list() arg1_shape = args[1].get_shape().as_list() if len(arg0_shape) != 3 or len(arg1_shape) != 3: raise ValueError("`args` must be 3 dims (batch_size, len, dimension)") if arg0_shape[2] != arg1_shape[2]: raise ValueError("the last dimension of `args` must equal") arg_size = arg0_shape[2] dtype = args[0].dtype droped_args = [tf.nn.dropout(arg, input_keep_prob) for arg in args] with tf.variable_scope(scope): weights4arg0 = tf.get_variable( "linear_kernel4arg0", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4arg1 = tf.get_variable( "linear_kernel4arg1", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4mlu = tf.get_variable( "linear_kernel4mul", [1, 1, arg_size], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) biases = tf.get_variable( "linear_bias", [1], dtype=dtype, regularizer=regularizer, initializer=bias_initializer) subres0 = tf.tile(dot(droped_args[0], weights4arg0), [1, 1, q_maxlen]) subres1 = tf.tile(tf.transpose(dot(droped_args[1], weights4arg1), perm=(0, 2, 1)), [1, c_maxlen, 1]) subres2 = batch_dot(droped_args[0] * weights4mlu, tf.transpose(droped_args[1], perm=(0, 2, 1))) res = subres0 + subres1 + subres2 nn_ops.bias_add(res, biases) return res
Example #27
Source File: rnn_cell.py From Multiview2Novelview with MIT License | 5 votes |
def _linear(self, args): out_size = 4 * self._num_units proj_size = args.get_shape()[-1] dtype = args.dtype weights = vs.get_variable("kernel", [proj_size, out_size], dtype=dtype) out = math_ops.matmul(args, weights) if not self._layer_norm: bias = vs.get_variable("bias", [out_size], dtype=dtype) out = nn_ops.bias_add(out, bias) return out
Example #28
Source File: rnn_cell_impl.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def __call__(self, args): if not self._is_sequence: args = [args] if len(args) == 1: res = math_ops.matmul(args[0], self._weights) else: res = math_ops.matmul(array_ops.concat(args, 1), self._weights) if self._build_bias: res = nn_ops.bias_add(res, self._biases) return res # TODO(xpan): Remove this function in a follow up.
Example #29
Source File: rnn_cell.py From lambda-packs with MIT License | 5 votes |
def _linear(self, args): out_size = 4 * self._num_units proj_size = args.get_shape()[-1] weights = vs.get_variable("kernel", [proj_size, out_size]) out = math_ops.matmul(args, weights) if not self._layer_norm: bias = vs.get_variable("bias", [out_size]) out = nn_ops.bias_add(out, bias) return out
Example #30
Source File: layers.py From question-generation with MIT License | 5 votes |
def optimized_trilinear_for_attention(args, c_maxlen, q_maxlen, input_keep_prob=1.0, scope='efficient_trilinear', bias_initializer=tf.zeros_initializer(), kernel_initializer=initializer()): assert len(args) == 2, "just use for computing attention with two input" arg0_shape = args[0].get_shape().as_list() arg1_shape = args[1].get_shape().as_list() if len(arg0_shape) != 3 or len(arg1_shape) != 3: raise ValueError("`args` must be 3 dims (batch_size, len, dimension)") if arg0_shape[2] != arg1_shape[2]: raise ValueError("the last dimension of `args` must equal") arg_size = arg0_shape[2] dtype = args[0].dtype droped_args = [tf.nn.dropout(arg, input_keep_prob) for arg in args] with tf.variable_scope(scope): weights4arg0 = tf.get_variable( "linear_kernel4arg0", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4arg1 = tf.get_variable( "linear_kernel4arg1", [arg_size, 1], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) weights4mlu = tf.get_variable( "linear_kernel4mul", [1, 1, arg_size], dtype=dtype, regularizer=regularizer, initializer=kernel_initializer) biases = tf.get_variable( "linear_bias", [1], dtype=dtype, regularizer=regularizer, initializer=bias_initializer) subres0 = tf.tile(dot(droped_args[0], weights4arg0), [1, 1, q_maxlen]) subres1 = tf.tile(tf.transpose(dot(droped_args[1], weights4arg1), perm=(0, 2, 1)), [1, c_maxlen, 1]) subres2 = batch_dot(droped_args[0] * weights4mlu, tf.transpose(droped_args[1], perm=(0, 2, 1))) res = subres0 + subres1 + subres2 nn_ops.bias_add(res, biases) return res