示例#1
0
    def test_map(self):
        nn = 50
        _x = np.random.normal(size=(nn, 3))
        _y = .4 * _x[:,
                     0] + 0.2 * _x[:,
                                   1] - 0.3 * _x[:,
                                                 2] + 1.5 + np.random.normal(
                                                     size=(nn), scale=.1)

        _x = tf.convert_to_tensor(_x)
        _y = tf.convert_to_tensor(_y)

        model = tf.keras.Sequential([tf.keras.layers.Dense(1)])

        def _make_prior(posterior):
            n = len(posterior.event_shape)
            return tfd.Independent(tfd.Normal(
                tf.zeros(posterior.event_shape, dtype=posterior.dtype),
                tf.constant(2., dtype=posterior.dtype)),
                                   reinterpreted_batch_ndims=n)

        bayesian_model = svi.SVI(model,
                                 kl_scale=1.0,
                                 prior_fn=_make_prior,
                                 posterior_fn=svi.make_deterministic_posterior)

        bayesian_model.compile(
            loss=tfk.losses.MeanSquaredError(),
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
            run_eagerly=False)
        bayesian_model.fit(_x, _y, epochs=2, batch_size=nn, verbose=1)

        return
示例#2
0
    def test_mc_kl(self):
        nn = 50
        _x = np.random.normal(size=(nn, 3))
        _y = .4 * _x[:,
                     0] + 0.2 * _x[:,
                                   1] - 0.3 * _x[:,
                                                 2] + 1.5 + np.random.normal(
                                                     size=(nn), scale=.1)

        _x = tf.convert_to_tensor(_x)
        _y = tf.convert_to_tensor(_y)

        model = tf.keras.Sequential(
            [tf.keras.Input(shape=(3)),
             tf.keras.layers.Dense(1)])

        bayesian_model = svi.SVI(model,
                                 kl_scale=1.0,
                                 kl_fn=svi.mc_kl,
                                 prior_fn=svi.make_spike_and_slab_prior,
                                 posterior_fn=svi.make_mvn_posterior)
        bayesian_model.compile(
            loss=tfk.losses.MeanSquaredError(),
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.01))
        bayesian_model.fit(_x, _y, epochs=2, batch_size=nn, verbose=1)
示例#3
0
    def test_rnn(self):
        x = np.random.normal(size=(200, 10, 1))
        y = np.random.normal(size=(200, 1))
        model = tf.keras.Sequential([
            tf.keras.Input(shape=(10, 1)),
            # tf.keras.layers.GRU(4),
            tf.keras.layers.RNN(tfk.layers.GRUCell(4)),
            tf.keras.layers.Dense(1)
        ])

        bayesian_model = svi.SVI(model, kl_scale=1.0)
        bayesian_model.compile(
            loss=tfk.losses.MeanSquaredError(),
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.01))
        bayesian_model.fit(x, y, epochs=2, batch_size=64, verbose=1)
示例#4
0
    def test_built(self):
        nn = 50
        _x = np.random.normal(size=(nn, 3)).astype(np.float32)
        _y = .4 * _x[:,
                     0] + 0.2 * _x[:,
                                   1] - 0.3 * _x[:, 2] + 1.5 + np.random.normal(
                                       size=(nn), scale=.1).astype(np.float32)

        _x = tf.convert_to_tensor(_x)
        _y = tf.convert_to_tensor(_y)

        model = tf.keras.Sequential([tf.keras.layers.Dense(1)])
        model(_x)
        bayesian_model = svi.SVI(model, kl_scale=1.0)
        bayesian_model.compile(
            loss=tfk.losses.MeanSquaredError(),
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.01))
        bayesian_model.fit(_x, _y, epochs=2, batch_size=nn, verbose=1)

        return
示例#5
0
    def test_test_step(self):
        nn = 50
        _x = np.random.normal(size=(nn, 3))
        _y = .4 * _x[:,
                     0] + 0.2 * _x[:,
                                   1] - 0.3 * _x[:,
                                                 2] + 1.5 + np.random.normal(
                                                     size=(nn), scale=.1)

        _x = tf.convert_to_tensor(_x, dtype=tf.keras.backend.floatx())
        _y = tf.convert_to_tensor(_y, dtype=tf.keras.backend.floatx())

        model = tf.keras.Sequential([
            tf.keras.layers.Dense(1),
            tfp.layers.DistributionLambda(
                lambda t: tfd.Independent(tfd.Normal(loc=t, scale=t**2), 1))
        ])

        bayesian_model = svi.SVI(model,
                                 kl_scale=1.0,
                                 kl_fn=svi.mc_kl,
                                 prior_fn=svi.make_spike_and_slab_prior,
                                 posterior_fn=svi.make_mvn_posterior)
        bayesian_model.compile(
            loss=lambda y, rv_y: -rv_y.log_prob(y),
            optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
            metrics=['mse'])
        h = bayesian_model.fit(_x,
                               _y,
                               epochs=2,
                               batch_size=nn,
                               validation_data=(_x, _y),
                               verbose=1)
        self.assertTrue('val_loss' in h.history)
        self.assertTrue('val_mse' in h.history)
        pass