FluxML / FastAI.jl

Repository of best practices for deep learning in Julia, inspired by fastai
https://fluxml.ai/FastAI.jl
MIT License
585 stars 51 forks source link

InceptionTime Model for Time Series #256

Closed codeboy5 closed 1 year ago

codeboy5 commented 2 years ago

This PR will contain the implementation of InceptionTime Model and it's use for classification and regression task.

Some of the commits from the PR #253 are also in this PR, but will take care of them when that PR is merged.

codeboy5 commented 2 years ago

Have to fix a couple of issues with the residual part.

codeboy5 commented 2 years ago

Hey @ToucheSir @darsnack @lorenzoh, So If i do use the residual layers, I seem to be getting a size mismatch during the backprop. The forward pass and loss computation works fine. I am still trying to figure out where exactly the issue is. If you see any issues by just taking a quick look at the code, it would help. Thanks

ToucheSir commented 2 years ago

Try building up your model bit-by-bit and checking for size mismatches on each submodule with a dummy input. Flux.outputsize can also be very useful here.

codeboy5 commented 2 years ago

Try building up your model bit-by-bit and checking for size mismatches on each submodule with a dummy input. Flux.outputsize can also be very useful here.

Yeah I tried doing that. I dont understand how the forward pass works fine but the backprop gives an error. Will figure it out.

ToucheSir commented 2 years ago

Since only InceptionModule has been ported over so far, you could save some time by just testing with that. Feel free to drop a MWE and stacktrace here if you get stuck.

InceptionBlock will need to receive the same treatment at some point. One resource which might help are the 2D Inception image models in Metalhead. Those make extensive use of Flux container layers.

codeboy5 commented 1 year ago

The code can be tested with the following snipet :-

data, blocks = load(datarecipes()["natops"]);
task = TSClassificationSingle(blocks, data);
traindl, validdl = taskdataloaders(data, task, 16);
callbacks = [ToGPU(), Metrics(accuracy)];
model = FastTimeSeries.Models.InceptionTime(24, 6);
learner = Learner(model, tasklossfn(task); data=(traindl, validdl), optimizer=ADAM(), callbacks = [ToGPU(), Metrics(accuracy)]);
fitonecycle!(learner, 10, 0.01)
codeboy5 commented 1 year ago

Hey guys, so the model is working for regression task too now, will push the notebook in a while.

ToucheSir commented 1 year ago

I have some suggestions for the notebook, but that can wait for a follow-up PR. Will try to have a look at the model again in the next couple of days.

codeboy5 commented 1 year ago

Mostly LGTM once docstrings are added and commented code is restored/removed.

Hey, will push the docstrings today. This PR should be ready to go after it unless we want to further improve something. We can also discuss the future steps in our next biweekly.