Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve handling of model parameters #98

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

berleon
Copy link
Contributor

@berleon berleon commented Jan 26, 2020

Hi Avanti,

I modified how DeepLIFT handles model parameters. The current behaviour is to store them as
numpy arrays. I converted them to tensorflow variables. This change resulted in a 10x
speed up for a VGG-16.

def benchmark_deeplift(analyzer):
    start = time.time()
    analyzer.create_analyzer_model()
    print("creating analyzer: {:.4f}s".format(time.time() - start))

    start = time.time()
    analyzer.analyze(meta.ex_image)
    print("analyzing first image: {:.4f}s".format(time.time() - start))

    start = time.time()
    n = 5
    for i in range(n):
        analyzer.analyze(meta.ex_image)
    print("analyzing {} image: {:.4f}s".format(n, time.time() - start))

This code snippet gives the following numbers on (AMD Ryzen 1950X 16 Cores, 64 GB RAM, RTX 2080 TI) for a VGG-16:

With tensorflow variables:

creating analyzer: 14.2925s
analyzing first image: 6.4111s
analyzing 5 image: 13.3561s

With numpy variables:

creating analyzer: 62.4572s
analyzing first image: 164.0128s
analyzing 5 image: 95.1095s

Also the speedup is decent, the current code would break backwards compabibilty.
If any code relies on Conv2d.kernel to be a numpy array. If you would consider this a problem, one could create extra variables like Conv2d._tf_kernel with the tensorflow variable.

Cheers,
Leon

@berleon
Copy link
Contributor Author

berleon commented Jan 26, 2020

okay, the tests are failing exactly because of this backward compatibility problem. Let me know if you would prefer to put the tensorflow variables into an ._tf_kernel and ._tf_bias members. The .kernel member could then become a property that evaluates _tf_kernel. Otherwise, I could adapt the tests to work with tensorflow variables.

Before this commit the model parameters were stored as numpy array. Now the  model parameters are
converted to a tensorflow variable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant