Giter VIP home page Giter VIP logo

scnn_experiments's Introduction

scnn_experiments

This repository provides code to replicate the experiments in the paper Fast Convex Optimization for Two-Layer ReLU Networks: Equivalent Model Classes and Cone Decompositions by Aaron Mishkin, Arda Sahiner, and Mert Pilanci.

Requirements

Python 3.8 or newer.

Setup

Clone the repository using

git clone https://github.com/pilanci_lab/scnn_experiments.git

We provide a script for easy setup on Unix systems. Run the setup.sh file with

./setup.sh

This will:

  1. Create a virtual environment in .venv and install the project dependencies.
  2. Install scaffold in development mode. This library contains infrastructure for running our experiments.
  3. Create the data, figures, tables, and results directories.

After running setup.sh, you need to activate the virtualenv using

source .venv/bin/activate

Replications

The experiments are run via a command-line interface. Most experiments can be replicated with a single command, but some require a sequence of experiments to be executed in the correct order.

Running Experiments

First, make sure that the virtual environment is active. Running where python in bash will show you where the active Python binaries are; this will point to a file in code/.venv/bin if the virtual environment is active.

Scripts are executed by calling scripts/run_experiment.py with the -E flag to specify an experiment name, like in the following:

python scripts/run_experiment.py -E "test"

There are several command line arguments that can be passed to run_experiment.py, such as -V for verbose execution, -F to force re-runs, etc. Try

python scripts/run_experiment.py --help 

To see all the available options.

Experiment configurations are located in scripts/exp_configs. The configuration scripts/exp_configs/test.py is provided so you can familiarize yourself with the execution system.

Pre-defined sbatch configurations for slurm are provided in sbatch_scripts for transparency and convenience. These are the exact configurations used to run the original experiments on the Sherlock Cluster. A flag specifying which sbatch script can be passed to run_experiment.py. This will be used to submit slurm jobs if the -N parameter (used to specify number of nodes) is also passed.

Replicating Specific Experiments

All experiments are named to corresponding with the figure/table which they generate in the paper. For example, Figure 1 can be generated by running the figure_1 experiment defined in scripts/exp_configs/figure_1.py and then using

python scripts/make_figure_1_6.py

To generate Figures 1 and 6. Check each experiment file to see the exact experiment names. As noted above, some experiments have specific orders in which they must be executed; these are:

  • Table 2:

    • Run the experiments in table_2_gs.py first.
    • Run extract_table_2_best_params.py.
    • Run the experiments in table_2_final.py.
  • Table 3:

    • Run the experiments in table_3_gs.py first. Note that table_3_nc_relu_gs must be run after table_3_relu_gs, since the latter experiment is used to determine the widths of the non-convex networks. You must update a file-path used to load experiments results before running table_3_nc_relu_gs.
    • Run extract_table_3_best_params.py.
    • Run the experiments in table_3_final.py. Again, there are several file-paths to update and table_3_nc_relu_final must be run after table_3_relu_support.
  • Figure 4:

    • Run the experiments in table_4.py. Again, you must run figure_4_relu before figure_4_nc_relu and it is necessary to update a file-path before running the latter.

The remaining experiments are straightforward to replicate.

Bugs or Other Issues

Please open an issue if you experience any bugs or have trouble replicating the experiments.

scnn_experiments's People

Contributors

aaronpmishkin avatar

Watchers

 avatar

scnn_experiments's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.