maetshju / flux-blstm-implementation

An implementation of the Graves & Schmidhuber (2005) bidirectional LSTM in Flux.
MIT License
10 stars 4 forks source link

Data Preparation & Model Training #1

Closed wenjie-p closed 3 years ago

wenjie-p commented 4 years ago

Hi, Matthew

I am new to Speech Information Processing and Julia, and I am currently working on TIMIT database. I am very excited to find your recipe for timit training using Julia. (this repo is the same as that in FluxML/model-zoo/contrib/audio/speech-blstm)

After executing this script, I have encountered some issues: 1) Data Preparation: In your data preparation code, you list the file on the train/test dir but there existing a README file in each dir. Process such file as speech data will fail. 2)Model Training: 01-blstm.ji line: 168, an error occurs here. It says no method matching for Momentum, So I did some modifications: opt = Momentum(10.0^-5, 0.9) ps = params(forward, backward, output) ... Flux.train!(loss, ps, data, opt) So this starts training. But I got another error in line BLSTM(x) = vcat.(forward.(x), flip(backward, x)) says that ERROR: LoadError: Mutating arrays is not supported.

Note that the scripts I actually ran are in the model-zoo, but I find they are the same to this repo. So I open this issue.

maetshju commented 4 years ago

Hi Wenjie! I'm glad you're finding this interesting!

In regard to data preparation, you're right that there is a README in each folder. Really, that was just supposed to be a placeholder in the GitHub repository because I can't upload all of TIMIT into those folders. I was expecting that users would know to delete them locally, but I probably could have been more explicit about that.

As for the model training, it looks like this has to do with the new AD being used in Flux, Zygote. It doesn't seems to support array mutation in its master branch yet (https://github.com/FluxML/Zygote.jl/pull/61). Fixing this script would require either choosing to use Tracker.jl instead of Zygote for automatic differentiation or, preferably, to rewrite the BLSTM layer to not have mutation. I'm not sure which of those options is more feasible for me at the moment though.

Theoretically, the script should work with older versions of Flux (older than 0.10.0 where Zygote was introduced).