示例#1
0
    def test_density_gauss_1d(self):
        # Arrange
        mu = 0
        sigma = 1
        n_bins = 180
        N_points = int(10e5)
        samples = np.random.randn(N_points, 1) * sigma + mu

        p_min = np.min(samples)
        p_max = np.max(samples)
        delta = 3 * (p_max - p_min) / n_bins
        points_linsp = np.linspace(p_min - delta, p_max + delta, n_bins)

        net = nn.RMIOptimizer(H_nbins=n_bins)

        # Act
        dx_expected = points_linsp[1] - points_linsp[0]
        px_expected = 1 / np.sqrt(2 * np.pi * sigma**2) * np.exp(
            -0.5 * (points_linsp - mu)**2 / sigma**2)

        tf_y = nn.tf.convert_to_tensor(samples.T, nn.K.backend.floatx())
        px, dx = net.tf_calcProbabilityDistribution(tf_y)
        px = px.numpy()
        dx = dx.numpy()

        # Assert
        np.testing.assert_almost_equal(px, px_expected, decimal=2)
示例#2
0
    def test_density_gauss_2d(self):
        # Arrange
        mu = np.array([0, 1])
        sigma = np.array([[1, 0.5], [0.5, 2]])
        det_sigma = np.linalg.det(sigma)

        n_bins = 100
        N_points = int(10e4)
        samples = np.random.multivariate_normal(mu, sigma, N_points)

        p_min = np.min(samples, 0)
        p_max = np.max(samples, 0)
        delta = 3 * (p_max - p_min) / n_bins

        points_linspX = np.linspace(p_min[0] - delta[0], p_max[0] + delta[0],
                                    n_bins)
        points_linspY = np.linspace(p_min[1] - delta[0], p_max[1] + delta[0],
                                    n_bins)

        mesh_x, mesh_y = np.meshgrid(points_linspX, points_linspY)
        point_x = mesh_x.flatten()
        point_y = mesh_y.flatten()
        points = np.array([point_x, point_y]).T

        net = nn.RMIOptimizer(H_nbins=n_bins)

        # Act
        dx_expected = (p_max - p_min) / n_bins
        px_expected = 1/np.sqrt((2*np.pi)**2*det_sigma) * \
            np.exp(-0.5*np.diag(np.dot((points-mu), np.dot((points-mu), np.linalg.inv(sigma)).T)))

        px_expected = px_expected.reshape([n_bins, n_bins]).T

        tf_y = nn.tf.convert_to_tensor(samples.T, nn.K.backend.floatx())

        px, dx = net.tf_calcProbabilityDistribution(tf_y)
        px = px.numpy()
        dx = dx.numpy()

        # Assert
        np.testing.assert_almost_equal(dx, dx_expected, decimal=2)
        np.testing.assert_almost_equal(px, px_expected, decimal=2)
示例#3
0
def get_batch(N_batch):
    return wp.produce_Wave_Packet(n_pixels=args.N_pixels,
                                  n_samples=N_batch,
                                  width=args.width,
                                  noise=args.noise,
                                  pos_range=args.pos_range)


rmi_optimizer = nn.RMIOptimizer(H_binsize,
                                H_kernel_size,
                                coeff_gauss,
                                reg_amplitude=reg_amplitude,
                                reg_decay=reg_decay,
                                layers=[
                                    nn.K.layers.Dense(
                                        args.neurons,
                                        activation="tanh",
                                        input_shape=(args.N_pixels, )),
                                    nn.K.layers.Dense(args.neurons,
                                                      activation="tanh"),
                                    nn.K.layers.Dense(n_out)
                                ])

rmi_optimizer.compile(optimizer=nn.tf.optimizers.Adam(args.eta))
rmi_net = nn.Net(rmi_optimizer, mode="w", path=path)

rmi_net.fit_generator(lambda: get_batch(args.batchsize)[0],
                      args.N_train,
                      force_training=True)
rmi_net.plot_rmi_cost(save_file="../logs/wavepacket_" + args.output + ".pdf")
示例#4
0
    path = None


def get_batch(N_batch):
    return wp.produce_Wave_Packet(n_pixels=args.N_pixels,
                                  n_samples=N_batch,
                                  width=args.width,
                                  noise=args.noise,
                                  pos_range=args.pos_range)


encoder = nn.RMIOptimizer(H_binsize,
                          H_kernel_size,
                          layers=[
                              nn.K.layers.Dense(args.neurons,
                                                activation="tanh",
                                                input_shape=(args.N_pixels, )),
                              nn.K.layers.Dense(args.neurons,
                                                activation="tanh"),
                              nn.K.layers.Dense(n_out)
                          ])

decoder = nn.K.Sequential(layers=[
    nn.K.layers.Dense(args.neurons, activation="relu", input_shape=(n_out, )),
    nn.K.layers.Dense(args.neurons, activation="relu"),
    nn.K.layers.Dense(args.N_pixels)
])

autoencoder = nn.Supervised(cost="mse_contract", layers=[encoder, decoder])
autoencoder.compile(optimizer=nn.tf.optimizers.Adam(args.eta))

ae_net = nn.Net(autoencoder, mode="w", path=path)
示例#5
0
    path = None

H_binsize = 100
H_kernel_size = 2
n_out = 2


def get_batch(batchsize):
    random_indices = np.random.choice(np.arange(N_samples), size=batchsize)
    return samples[random_indices], None, random_indices


encoder = nn.RMIOptimizer(H_binsize,
                          H_kernel_size,
                          layers=[
                              nn.K.layers.Dense(args.n_neurons,
                                                activation="relu",
                                                input_shape=(n_in, )),
                              nn.K.layers.Dense(n_out)
                          ])

decoder = nn.K.Sequential(layers=[
    nn.K.layers.Dense(args.n_neurons, activation="relu", input_shape=(
        n_out, )),
    nn.K.layers.Dense(n_in)
])

autoencoder = nn.Supervised(cost="mse_contract", layers=[encoder, decoder])
autoencoder.compile(optimizer=nn.tf.optimizers.RMSprop(eta))

ae_net = nn.Net(autoencoder, mode="w", path=path)
enc_net = nn.Net(encoder)