Skip to content

Commit

Permalink
build based on 2f1301b
Browse files Browse the repository at this point in the history
  • Loading branch information
Documenter.jl committed Nov 14, 2023
1 parent cf840ea commit 4a39409
Show file tree
Hide file tree
Showing 16 changed files with 28 additions and 28 deletions.
2 changes: 1 addition & 1 deletion dev/api/index.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dev/examples/box_obsv/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -126,4 +126,4 @@
display(fig)
return fig
end
fig = plot_results(x_test, xhat, ts_test)</code></pre><p><img src="../../assets/ren-obsv/ren_box_obsv.svg" alt/></p><p>In the left-hand panels, grey lines represent the true states of the system, while red lines are for the observer prediction. In the right-hand panels, we see the observer error nicely converging to zero as the observer identifies the correct velocity for all simulation runs. </p><p>It&#39;s worth noting that at no point did we directly train the REN to minimise the observer error. This is a natural result of using a model that is guaranteed to be contracting, and training it to minimise the one-step-ahead prediction error. Note that there is still some residual observer error in the velocity, since our observer is only trained to approximately satisfy the correctness condition.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../rl/">« Reinforcement Learning</a><a class="docs-footer-nextpage" href="../echo_ren/">(Convex) Nonlinear Control »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 26 October 2023 05:39">Thursday 26 October 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
fig = plot_results(x_test, xhat, ts_test)</code></pre><p><img src="../../assets/ren-obsv/ren_box_obsv.svg" alt/></p><p>In the left-hand panels, grey lines represent the true states of the system, while red lines are for the observer prediction. In the right-hand panels, we see the observer error nicely converging to zero as the observer identifies the correct velocity for all simulation runs. </p><p>It&#39;s worth noting that at no point did we directly train the REN to minimise the observer error. This is a natural result of using a model that is guaranteed to be contracting, and training it to minimise the one-step-ahead prediction error. Note that there is still some residual observer error in the velocity, since our observer is only trained to approximately satisfy the correctness condition.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../rl/">« Reinforcement Learning</a><a class="docs-footer-nextpage" href="../echo_ren/">(Convex) Nonlinear Control »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Tuesday 14 November 2023 01:01">Tuesday 14 November 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
2 changes: 1 addition & 1 deletion dev/examples/echo_ren/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,4 @@
lines!(ax2, [1, length(u_test)], [5, 5], color=:black, linestyle=:dash)
axislegend(ax2, position=:rt)

display(f)</code></pre><p><img src="../../assets/echo-ren/echo_ren_results.svg" alt/></p><p>In open loop (i.e: just the system <span>$\mathcal{T}_0$</span> without our echo state REN), the performance output increases linearly with the disturbance amplitude. When we add our optimised &quot;Echo-REN&quot;, it returns the performance output to zero as quickly as possible without exceeding the <span>$\pm 5$</span> limits on the control signal. The steady-state amplitude only starts to deviate from zero when the control signal reaches its limits.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../box_obsv/">« Observer Design</a><a class="docs-footer-nextpage" href="../../lib/models/">Model Wrappers »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 26 October 2023 05:39">Thursday 26 October 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
display(f)</code></pre><p><img src="../../assets/echo-ren/echo_ren_results.svg" alt/></p><p>In open loop (i.e: just the system <span>$\mathcal{T}_0$</span> without our echo state REN), the performance output increases linearly with the disturbance amplitude. When we add our optimised &quot;Echo-REN&quot;, it returns the performance output to zero as quickly as possible without exceeding the <span>$\pm 5$</span> limits on the control signal. The steady-state amplitude only starts to deviate from zero when the control signal reaches its limits.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../box_obsv/">« Observer Design</a><a class="docs-footer-nextpage" href="../../lib/models/">Model Wrappers »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Tuesday 14 November 2023 01:01">Tuesday 14 November 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
2 changes: 1 addition & 1 deletion dev/examples/lbdn_curvefit/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,4 @@
lines!(xs, ŷ, label = &quot;LBDN slope = $(round(Empirical_Lipschitz; digits=2))&quot;)
axislegend(ax, position=:lt)
save(&quot;lbdn_curve_fit.svg&quot;, f1)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">CairoMakie.Screen{SVG}
</code></pre><p><img src="../lbdn_curve_fit.svg" alt/></p><p>The model roughly approximates the step function <span>$f(x)$</span>, but maintains a maximum Lipschitz constant (slope on the graph) below 10.0. It is reasonably close to the best-possible value, and can easily be improved with a slightly larger model and more training time.</p><p>The benefit of using an LBDN is that we have full control over the Lipschitz bound, and can still use standard unconstrained gradient descent tools lile <code>Flux.train!</code> to train our models. For examples in which setting the Lipschitz bound improves model performance and robustness, see <a href="../lbdn_mnist/#Image-Classification-with-LBDN">Image Classification with LBDN</a> and <a href="../rl/#Reinforcement-Learning-with-LBDN">Reinforcement Learning with LBDN</a>.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../introduction/developing/">« Contributing to the Package</a><a class="docs-footer-nextpage" href="../lbdn_mnist/">Image Classification »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 26 October 2023 05:39">Thursday 26 October 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
</code></pre><p><img src="../lbdn_curve_fit.svg" alt/></p><p>The model roughly approximates the step function <span>$f(x)$</span>, but maintains a maximum Lipschitz constant (slope on the graph) below 10.0. It is reasonably close to the best-possible value, and can easily be improved with a slightly larger model and more training time.</p><p>The benefit of using an LBDN is that we have full control over the Lipschitz bound, and can still use standard unconstrained gradient descent tools lile <code>Flux.train!</code> to train our models. For examples in which setting the Lipschitz bound improves model performance and robustness, see <a href="../lbdn_mnist/#Image-Classification-with-LBDN">Image Classification with LBDN</a> and <a href="../rl/#Reinforcement-Learning-with-LBDN">Reinforcement Learning with LBDN</a>.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../introduction/developing/">« Contributing to the Package</a><a class="docs-footer-nextpage" href="../lbdn_mnist/">Image Classification »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Tuesday 14 November 2023 01:01">Tuesday 14 November 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
2 changes: 1 addition & 1 deletion dev/examples/lbdn_mnist/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,4 @@

xlims!(ax1, 0, 0.8)
axislegend(ax1, position=:lb)
save(&quot;lbdn_mnist_robust.svg&quot;, fig)</code></pre><p><img src="../../assets/lbdn-mnist/lbdn_mnist_robust.svg" alt/></p><p>Plotting the results very clearly shows that the <code>dense</code> network, which has no guarantees on its Lipschitz bound, quickly loses its accuracy as small amounts of noise are added to the image. In contrast, the LBDN <code>model</code> maintains its accuracy even when the (maximum) perturbation size is as much as 80% of the maximum pixel values. This is an illustration of why image classification is one of the most promising use-cases for LBDN models. For a more detailed comparison of LBDN with state-of-the-art image classification methods, see <a href="https://proceedings.mlr.press/v202/wang23v.html">Wang &amp; Manchester (2023)</a>.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../lbdn_curvefit/">« Fitting a Curve</a><a class="docs-footer-nextpage" href="../rl/">Reinforcement Learning »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 26 October 2023 05:39">Thursday 26 October 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
save(&quot;lbdn_mnist_robust.svg&quot;, fig)</code></pre><p><img src="../../assets/lbdn-mnist/lbdn_mnist_robust.svg" alt/></p><p>Plotting the results very clearly shows that the <code>dense</code> network, which has no guarantees on its Lipschitz bound, quickly loses its accuracy as small amounts of noise are added to the image. In contrast, the LBDN <code>model</code> maintains its accuracy even when the (maximum) perturbation size is as much as 80% of the maximum pixel values. This is an illustration of why image classification is one of the most promising use-cases for LBDN models. For a more detailed comparison of LBDN with state-of-the-art image classification methods, see <a href="https://proceedings.mlr.press/v202/wang23v.html">Wang &amp; Manchester (2023)</a>.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../lbdn_curvefit/">« Fitting a Curve</a><a class="docs-footer-nextpage" href="../rl/">Reinforcement Learning »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Tuesday 14 November 2023 01:01">Tuesday 14 November 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
2 changes: 1 addition & 1 deletion dev/examples/pde_obsv/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -180,4 +180,4 @@
plot_heatmap(f1, abs.(x - Xhat[:, 1:batches:end]), 3)
Colorbar(f1[:,2], colorrange=(0,1),colormap=:thermal)

display(f1)</code></pre><p>In the plot, the x-axis is the time dimension and the y-axis is the spatial dimension. <img src="../../assets/ren-obsv/ren_pde.png" alt/></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Thursday 26 October 2023 05:39">Thursday 26 October 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
display(f1)</code></pre><p>In the plot, the x-axis is the time dimension and the y-axis is the spatial dimension. <img src="../../assets/ren-obsv/ren_pde.png" alt/></p></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.25 on <span class="colophon-date" title="Tuesday 14 November 2023 01:01">Tuesday 14 November 2023</span>. Using Julia version 1.9.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>
Loading

0 comments on commit 4a39409

Please sign in to comment.