<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/probability/blob/v0.25.0/tensorflow_probability/python/experimental/nn/util/kernel_bias.py#L46-L129) |

Creates kernel and bias as [`tf.Variable`](https://www.tensorflow.org/api_docs/python/tf/Variable)s.

    tfp.experimental.nn.util.make_kernel_bias(
        kernel_shape,
        bias_shape,
        kernel_initializer=None,
        bias_initializer=None,
        kernel_batch_ndims=0,
        bias_batch_ndims=0,
        dtype=tf.float32,
        kernel_name='kernel',
        bias_name='bias'
    )

<br />

<br />

<br />

| ## Args ||
|---|---|
| `kernel_shape` | ... |
| `bias_shape` | ... |
| `kernel_initializer` | ... Default value: `None` (i.e., `tf_keras.initializers.glorot_uniform()`). |
| `bias_initializer` | ... Default value: `None` (i.e., `tf_keras.initializers.zeros()`). |
| `kernel_batch_ndims` | ... Default value: `0`. |
| `bias_batch_ndims` | ... Default value: `0`. |
| `dtype` | ... Default value: [`tf.float32`](https://www.tensorflow.org/api_docs/python/tf#float32). |
| `kernel_name` | ... Default value: `"kernel"`. |
| `bias_name` | ... Default value: `"bias"`. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| `kernel` | ... |
| `bias` | ... |

<br />

#### Recommendations:

    #   tf.nn.relu    ==> tf_keras.initializers.he_*
    #   tf.nn.elu     ==> tf_keras.initializers.he_*
    #   tf.nn.selu    ==> tf_keras.initializers.lecun_*
    #   tf.nn.tanh    ==> tf_keras.initializers.glorot_*
    #   tf.nn.sigmoid ==> tf_keras.initializers.glorot_*
    #   tf.nn.softmax ==> tf_keras.initializers.glorot_*
    #   None          ==> tf_keras.initializers.glorot_*
    # https://towardsdatascience.com/hyper-parameters-in-action-part-ii-weight-initializers-35aee1a28404
    # https://stats.stackexchange.com/a/393012/1835

    def make_uniform(size):
      s = tf.math.rsqrt(size / 3.)
      return tfd.Uniform(low=-s, high=s)

    def make_normal(size):
      # Constant is: `scipy.stats.truncnorm.std(loc=0., scale=1., a=-2., b=2.)`.
      s = tf.math.rsqrt(size) / 0.87962566103423978
      return tfd.TruncatedNormal(loc=0, scale=s, low=-2., high=2.)

    # He.  https://arxiv.org/abs/1502.01852
    he_uniform = make_uniform(fan_in / 2.)
    he_normal  = make_normal (fan_in / 2.)

    # Glorot (aka Xavier). http://proceedings.mlr.press/v9/glorot10a.html
    glorot_uniform = make_uniform((fan_in + fan_out) / 2.)
    glorot_normal  = make_normal ((fan_in + fan_out) / 2.)