dReLU layer

In this example we look at what the dReLU layer hidden units look like, for different parameter values.

First load some packages.

import RestrictedBoltzmannMachines as RBMs
import Makie
import CairoMakie
using Statistics

Now initialize our dReLU layer, with unit parameters spanning an interesting range.

θps = [-3.0; 3.0]
θns = [-3.0; 3.0]
γps = [0.5; 1.0]
γns = [0.5; 1.0]
layer = RBMs.dReLU(;
    θp = [θp for θp in θps, θn in θns, γp in γps, γn in γns],
    θn = [θn for θp in θps, θn in θns, γp in γps, γn in γns],
    γp = [γp for θp in θps, θn in θns, γp in γps, γn in γns],
    γn = [γn for θp in θps, θn in θns, γp in γps, γn in γns]
)

Now we sample our layer to collect some data.

data = RBMs.sample_from_inputs(layer, zeros(size(layer)..., 10^6))

Let's plot the resulting histogram of the activations of each unit. We also overlay the analytical PDF.

fig = Makie.Figure(resolution=(1000, 700))
xs = repeat(reshape(range(minimum(data), maximum(data), 100), 1,1,1,1,100), size(layer)...)
ps = exp.(-RBMs.cgfs(layer) .- RBMs.energies(layer, xs))
for (iθp, θp) in enumerate(θps), (iθn, θn) in enumerate(θns)
    ax = Makie.Axis(fig[iθp,iθn], title="θp=$θp, θn=$θn", xlabel="h", ylabel="P(h)")
    for (iγp, γp) in enumerate(γps), (iγn, γn) in enumerate(γns)
        Makie.hist!(ax, data[iθp, iθn, iγp, iγn, :], normalization=:pdf, bins=30, label="γp=$γp, γn=$γn")
        Makie.lines!(ax, xs[iθp, iθn, iγp, iγn, :], ps[iθp, iθn, iγp, iγn, :], linewidth=2)
    end
    if iθp == iθn == 1
        Makie.axislegend(ax)
    end
end
fig
Example block output

This page was generated using Literate.jl.