Giter Club home page Giter Club logo

scatternet's Introduction


Scatter Net     
  '.\|/.'         
  (\   /)         
  - -O- -         
  (/   \)         
  ,'/|\'.         

Scatter Net

An example repository of using machine learning to solve a physics problem. Based on the work presented in, Nanophotonic Particle Simulation and Inverse Design Using Artificial Neural Networks (https://arxiv.org/abs/1712.03222). This repository is specifically designed for solving inverse design problems, particularly surrounding photonics and optics.

Geting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. This example will also generate Table I in the paper, and Figure 2,3, and 4.

Prerequisites

To run the Matlab code, Matlab will need to be installed. For this code, we used Matlab R2017a. Note that the project can be done without Matlab, but comparisons of speed and data generation cannot be done unless Matlab is installed.

This codebase is based on Python 2.7, and the pip packages used are shown in the requirements.txt file. To run this on AWS, use AMI ami-52bb0c32, and a p2.xlarge instance.

Now pytorch is supported (just main function), based on python3.

Installing

  1. Copy the github repo to your computer, and install the pip requirements.
git clone https://github.com/iguanaus/ScatterNet.git
cd ScatterNet
pip install -r requirements.txt
  1. Option 1: Fetch the data
cd data
sh fetchData.sh
  1. Option 2: View and Generate the data
scatter_sim_1_plot_data.m
scatter_sim_2_gen_data.m
  1. Option 1: Fetch the models
cd results
sh fetchResults.sh
  1. Option 2: Train the models (Table I)
sh demo.sh
  1. Compare spetrums (Figure 2)
sh demo_compareSpect.sh
  1. Perform Inverse Design (Figure 3)
sh demo_matchSpect.sh
  1. Perform Optimization (Figure 4)
sh demo_designSpect.sh

Structure

ScatteringNet_Matlab: This is the matlab code repository, intended to be run on a cluster or a high performance computer. Depends on matlab.

ScatteringNet_Tensorflow: This is the tensorflow/python repository, intended to be run on a computer with a GPU and tensorflow capabilities.

Flow:

  1. scatter_0_generate_spectrum Pick the settings for your data in the scatter_0_generate_spectrum.
  2. scatter_1_plot_sample Run the scatter_1_plot_sample to get an idea of what the data looks like. Make sure the data set is hollistics enough/has interesting features within it. Save these graphs, so you have an idea of what the data looks like. plotLoss.py is your friend. Use the pullFiles.sh script to pull the data locally from the server.
  3. scatter_2_generate_train Once you have that, run the scatter_2_generate_train on a cluster I recommend first changing the settings, then pushing it to the server.
  4. scatter_net_1_train Once you have the data, run the scatter_net_1_train to train the neural network on a GPU. Graph the loss.
  5. scatter_net_2_compareSpects Once you have the trained neural network, run the scatter_net_2_compareSpects.py to sample some spects and see what they are. Run plotSpects.py to see what these spectrums look like.
  6. scatter_3_generate_single_test Pick a spectrum, generate the data, move it over to the other repository.
  7. scatter_net_3_matchSpect See how it matches the spectrum.
  8. scatter_4_graph_geometry See how it did
  9. scatter_net_4_design.py Pick an optimal figure of merit, and then run this.
  10. scatter_5_graph_desired Graph the desired on top.

Contributing

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments

  • Hat tip to anyone who's code was used
  • Inspiration
  • etc

Scatter Net     
  '.\|/.'         
  (\   /)         
  - -O- -         
  (/   \)         
  ,'/|\'.         

MIT Department of Physics. All rights reserved. Version 1.0 - 06/10/2017 Produced and used by John Peurifoy. Assistance and guidance provided by: Li Jing, Yichen Shen, and Yi Yang. Updates and code fixes provided by Samuel Kim. A product of a collaboration between Max Tegmark's and Marin Soljacic's group. Originally created 04/24/2017

scatternet's People

Contributors

iguanaus avatar jingli9111 avatar kabume avatar samuelkim314 avatar

Watchers

 avatar

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.