# StackOverflowError in Bayesian Neural Networks Tutorial

**URL:** https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372
**Category:** Machine Learning
**Tags:** question
**Created:** [March 23, 2020, 2:05am UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372 "2020-03-23T02:05:38Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Farlein](https://avatars.discourse-cdn.com/v4/letter/f/90db22/32.png) [@Farlein](https://discourse.julialang.org/u/Farlein)
#### Post date: [March 23, 2020, 2:05am UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/1 "2020-03-23T02:05:38Z")

</div>

Hi there,

I am learning Bayesian Neural Networks (BNN) using Turing. I have copied the codes from the tutorial, [https://turing.ml/dev/tutorials/3-bayesnn/](https://turing.ml/dev/tutorials/3-bayesnn/).

The original code trains a BNN model with a synthetic dataset with 80 rows. The step “ch = sample(bayes\_nn(hcat(xs…), ts), HMC(0.05, 4), N);” costs 0:02:03 on my machine. If I change the “N = 80” to N=800, it costs 0:03:25. Pretty fast! However, if I change it N=8000, it gives me the error “StackOverflowError”. I have copied some rows of the detailed error information at the bottom of this post.

I want to build a BNN model to predict Admission Yield, and the dataset has about 40,000 rows and 90 variables, so I need to learn how to train a BNN model with relatively large dataset. Would you please help me to solve the error? Please let me know if I need to provide any other information.

Thanks,  
Chuan

**StackOverflowError:**  
in top-level scope at Learn Turing\_20200316.jl:105  
in sample at Turing\azHIm\src\inference\Inference.jl:136  
in #sample#1 at Turing\azHIm\src\inference\Inference.jl:136  
in sample at Turing\azHIm\src\inference\Inference.jl:148  
in #sample#2 at Turing\azHIm\src\inference\Inference.jl:149  
in Sampler at Turing\azHIm\src\inference\hmc.jl:302  
in DynamicPPL.Sampler at Turing\azHIm\src\inference\hmc.jl:310  
in Turing.Inference.HMCState at Turing\azHIm\src\inference\hmc.jl:533  
in #HMCState#52 at Turing\azHIm\src\inference\hmc.jl:562  
in sample\_init at AdvancedHMC\haUrH\src\sampler.jl:13  
in phasepoint at AdvancedHMC\haUrH\src\hamiltonian.jl:129  
in phasepoint at AdvancedHMC\haUrH\src\hamiltonian.jl:59  
in ∂H∂θ at AdvancedHMC\haUrH\src\hamiltonian.jl:28  
in ∂logπ∂θ at Turing\azHIm\src\inference\hmc.jl:401  
in gradient\_logp at Turing\azHIm\src\core\ad.jl:73  
in gradient\_logp\_reverse at Turing\azHIm\src\core\ad.jl:141  
in at Tracker\cpxco\src\back.jl:149  
in #18 at Tracker\cpxco\src\back.jl:140  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at base\abstractarray.jl:1921  
in #16 at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113  
in foreach at Tracker\cpxco\src\back.jl:113  
in back at Tracker\cpxco\src\back.jl:125  
in back\_ at Tracker\cpxco\src\back.jl:113

---

<div class="post-metadata">

### Author: ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)
#### Post date: [March 23, 2020, 2:33am UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/2 "2020-03-23T02:33:57Z")

</div>

I have seen this error before and it seems to be a Tracker issue with large loops. Zygote doesn’t have this problem. If you go on Turing#master you can use Zygote for AD with:

```julia
using Zygote, Turing; Turing.setadbackend(:zygote)

```

However, Zygote will take a lot of memory when compiling the gradient the first time.

---

<div class="post-metadata">

### Author: ![Farlein](https://avatars.discourse-cdn.com/v4/letter/f/90db22/32.png) [@Farlein](https://discourse.julialang.org/u/Farlein)
#### Post date: [March 23, 2020, 1:28pm UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/3 "2020-03-23T13:28:07Z")

</div>

Thanks, Mohamed. I have added Turing#master and am testing it with Turing.setadbackend(:zygote). It runs!

However, for 8000 rows, it is estimated to cost 10:39:00, which is much longer than 0:03:25 for N=800.

Thanks,  
Chuan

---

<div class="post-metadata">

### Author: ![Farlein](https://avatars.discourse-cdn.com/v4/letter/f/90db22/32.png) [@Farlein](https://discourse.julialang.org/u/Farlein)
#### Post date: [March 23, 2020, 1:35pm UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/4 "2020-03-23T13:35:44Z")

</div>

Another question I want to ask is about ForwardDiff. If I use Turing.setadbackend(:forward\_diff), the program runs fast with 8000 rows for 0:05:40. However, the acceptance rate is constantly 0 for the 5000 samples by HMC, and thus the std is just 0 for nn\_params. It is not the case with 80 rows. With 80 rows, I see the std is larger than 0 for each nn\_params in the chain ch from “ch = sample(bayes\_nn(hcat(xs…), ts), HMC(0.05, 4), N);”.

---

<div class="post-metadata">

### Author: ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)
#### Post date: [March 24, 2020, 7:49am UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/5 "2020-03-24T07:49:29Z")

</div>

With HMC, as you increase the number of data points, you need to lower the step size. Otherwise, just use NUTS.

---

<div class="post-metadata">

### Author: ![Farlein](https://avatars.discourse-cdn.com/v4/letter/f/90db22/32.png) [@Farlein](https://discourse.julialang.org/u/Farlein)
#### Post date: [March 24, 2020, 12:35pm UTC](https://discourse.julialang.org/t/stackoverflowerror-in-bayesian-neural-networks-tutorial/36372/6 "2020-03-24T12:35:41Z")

</div>

Thanks for your reply, Mohamed. I will lower the step size.
