本文介绍一下对一篇用neural network做inverse design的工作的学习。
文章地址:Nanophotonic particle simulation and inverse design using artificial neural networks;
代码地址:https://github.com/iguanaus/ScatterNet
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.
Getting 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.
(数据可以用matlab生成,提供的analytical的解出alternative的多层球的散射谱)
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.
代码用的是python2.7写的;并且用的是GPU来计算;我们没有GPU所以只用CPU计算。requirements中给出了很多packges,我们并没有全部安装。一般是运行起来之后,缺什么包再补充就好了
Installing
- 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
并没有全部安装requirements中的文件。我们用anaconda创建了一个python2.7的环境,然后再安装conda install matplotlib
,conda install tensorfolw==1.14
,conda install scikit-learn
三个包就可以了
- Option 1: Fetch the data
cd data
sh fetchData.sh
- Option 2: View and Generate the data
scatter_sim_1_plot_data.m
scatter_sim_2_gen_data.m
有两种获取数据的方法,Option 1是直接下载数据,Option 2 是用matlab自己生成数据
- Option 1: Fetch the models
cd results
sh fetchResults.sh
- Option 2: Train the models (Table I)
sh demo.sh
有两种获取model的方法。一种是作者训练好了的可以直接下载(option 1),另一种是用demo.sh的脚本文件调用python自己训练
- Compare spetrums (Figure 2)
sh demo_compareSpect.sh
- Perform Inverse Design (Figure 3)
sh demo_matchSpect.sh
- 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:
- scatter_0_generate_spectrum
Pick the settings for your data in the scatter_0_generate_spectrum. - 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. - 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. - 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. - 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. - scatter_3_generate_single_test
Pick a spectrum, generate the data, move it over to the other repository. - scatter_net_3_matchSpect
See how it matches the spectrum. - scatter_4_graph_geometry
See how it did - scatter_net_4_design.py
Pick an optimal figure of merit, and then run this. - 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