Flux.jl: Verify dataset downloads

Created on 29 Jan 2019  路  4Comments  路  Source: FluxML/Flux.jl

Trying to run a model from the model-zoo that downloads MNIST I got:

julia> include("conv.jl")
[ Info: Downloading MNIST dataset
[ Info: Downloading MNIST dataset
[ Info: Downloading MNIST dataset
ERROR: LoadError: EOFError: read end of file
Stacktrace:
 [1] read at .\iobuffer.jl:175 [inlined]
 [2] imageheader(::Base.GenericIOBuffer{Array{UInt8,1}}) at C:\Users\Kristoffer\.julia\packages\Flux\U8AZD\src\data\mnist.jl:44
 [3] images(::Symbol) at C:\Users\Kristoffer\.julia\packages\Flux\U8AZD\src\data\mnist.jl:93
 [4] images() at C:\Users\Kristoffer\.julia\packages\Flux\U8AZD\src\data\mnist.jl:91
 [5] top-level scope at none:0
 [6] include at .\boot.jl:326 [inlined]
 [7] include_relative(::Module, ::String) at .\loading.jl:1038
 [8] include(::Module, ::String) at .\sysimg.jl:29
 [9] include(::String) at .\client.jl:403
 [10] top-level scope at none:0
in expression starting at C:\Users\Kristoffer\MachineLearning\model-zoo\vision\mnist\conv.jl:7

It seems the download was corrupted. Trying again, just gives

julia> include("conv.jl")
ERROR: LoadError: EOFError: read end of file

so the faulty download is cached.

Would be nice to verify that the correct file is downloaded so one doesn't end up in a broken state.

help wanted

All 4 comments

Doing things like data download and verification consistantly and nicely is what DataDeps.jl is for.
(Of course you can reimplement that, is you want, one off verification isn't rocket science.)

But furthermore, why not just use MLDatasets.jl,
which has these datasets already and already uses DataDeps.jl for hash-checking etc.

I think we (a) wanted something in a slightly different format and (b) wanted the model zoo dependencies to just be Flux. But now we have manifests we're less worried about that, so maybe we could just switch over there and drop MNIST from flux itself.

Indeed now that we have sane package management,
I think it would be a good enhancement to the model zoo to actually depend on as much of the ecosystem as possible,
to demonstrate that flux does not stand alone, but can fully integrate with everything.
Unlike other frameworks where everything has to be included and made special just for that framework.

One might think datasets would be trivial, and ovious that you could use any.
but actually IIRC in python tensorflow and I think pytorch,
you have to use there inbuilt data loaders (because python is too slow),
and they thus have their own dataset repositories setup using them.

Feel free to open an issue on the model zoo, and I can mark it as help needed.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

MikeInnes picture MikeInnes  路  6Comments

tejank10 picture tejank10  路  6Comments

jw3126 picture jw3126  路  6Comments

mkborregaard picture mkborregaard  路  5Comments

Sheemon7 picture Sheemon7  路  3Comments