-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLibrary.html
More file actions
212 lines (193 loc) · 13.6 KB
/
Library.html
File metadata and controls
212 lines (193 loc) · 13.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Library — FitSNAP documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html">
<img src="_static/FitSNAP.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Introduction.html">1. Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="Installation.html">2. Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="Run/index.html">3. Run FitSNAP</a></li>
<li class="toctree-l1"><a class="reference internal" href="Linear.html">4. Linear Models</a></li>
<li class="toctree-l1"><a class="reference internal" href="Pytorch.html">5. PyTorch Models</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Programmer Guide</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Contributing.html">1. Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="Executable.html">2. Executable</a></li>
<li class="toctree-l1"><a class="reference internal" href="Lib/index.html">3. Library</a></li>
<li class="toctree-l1"><a class="reference internal" href="Tests.html">4. Tests</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">FitSNAP</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Library</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/Library.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="library">
<span id="id1"></span><h1>Library<a class="headerlink" href="#library" title="Permalink to this heading"></a></h1>
<p>The FitSNAP library provides a high level connection to FitSNAP methods in external Python scripts.
The library is designed based on instances of <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> objects with some important points:</p>
<ul class="simple">
<li><p>Each <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> instance possesses its own settings, such as hyperparameters.</p></li>
<li><p>Each <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> instance possesses its own optional MPI communicator over which appropriate
operations, such as calculating descriptors, are parallelized.</p></li>
<li><p>All results of collating data, calculating descriptors, and fitting a potential are therefore
contained within a <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> instance; this improves organization of fits and reduces
confusion about where a trained model came from.</p></li>
</ul>
<p>To use the library we must first import <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code>:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">fitsnap3lib.fitsnap</span> <span class="kn">import</span> <span class="n">FitSnap</span>
</pre></div>
</div>
<p>We will create an instance of <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> with specific input settings.
First we need to define the settings used by <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code>. This can be a path to a traditional
input script, or a dictionary containing sections and keywords. For example a <code class="code docutils literal notranslate"><span class="pre">settings</span></code>
dictionary to perform a fit can be defined like:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">settings</span> <span class="o">=</span> \
<span class="p">{</span>
<span class="s2">"BISPECTRUM"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"numTypes"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"twojmax"</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span>
<span class="s2">"rcutfac"</span><span class="p">:</span> <span class="mf">4.67637</span><span class="p">,</span>
<span class="s2">"rfac0"</span><span class="p">:</span> <span class="mf">0.99363</span><span class="p">,</span>
<span class="s2">"rmin0"</span><span class="p">:</span> <span class="mf">0.0</span><span class="p">,</span>
<span class="s2">"wj"</span><span class="p">:</span> <span class="mf">1.0</span><span class="p">,</span>
<span class="s2">"radelem"</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">,</span>
<span class="s2">"type"</span><span class="p">:</span> <span class="s2">"Ta"</span>
<span class="p">},</span>
<span class="s2">"CALCULATOR"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"calculator"</span><span class="p">:</span> <span class="s2">"LAMMPSSNAP"</span><span class="p">,</span>
<span class="s2">"energy"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"force"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"stress"</span><span class="p">:</span> <span class="mi">1</span>
<span class="p">},</span>
<span class="s2">"SOLVER"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"solver"</span><span class="p">:</span> <span class="s2">"SVD"</span>
<span class="p">},</span>
<span class="s2">"SCRAPER"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"scraper"</span><span class="p">:</span> <span class="s2">"JSON"</span>
<span class="p">},</span>
<span class="s2">"PATH"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"dataPath"</span><span class="p">:</span> <span class="s2">"/path/to/FitSNAP/examples/Ta_Linear_JCP2014/JSON"</span>
<span class="p">},</span>
<span class="s2">"REFERENCE"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"units"</span><span class="p">:</span> <span class="s2">"metal"</span><span class="p">,</span>
<span class="s2">"atom_style"</span><span class="p">:</span> <span class="s2">"atomic"</span><span class="p">,</span>
<span class="s2">"pair_style"</span><span class="p">:</span> <span class="s2">"hybrid/overlay zero 6.0 zbl 4.0 4.8"</span><span class="p">,</span>
<span class="s2">"pair_coeff1"</span><span class="p">:</span> <span class="s2">"* * zero"</span><span class="p">,</span>
<span class="s2">"pair_coeff2"</span><span class="p">:</span> <span class="s2">"* * zbl 73 73"</span>
<span class="p">},</span>
<span class="s2">"GROUPS"</span><span class="p">:</span>
<span class="p">{</span>
<span class="s2">"group_sections"</span><span class="p">:</span> <span class="s2">"name training_size testing_size eweight fweight vweight"</span><span class="p">,</span>
<span class="s2">"group_types"</span><span class="p">:</span> <span class="s2">"str float float float float float"</span><span class="p">,</span>
<span class="s2">"Displaced_FCC"</span> <span class="p">:</span> <span class="s2">"1.0 0.0 100 1 1.00E-08"</span><span class="p">,</span>
<span class="s2">"Volume_FCC"</span> <span class="p">:</span> <span class="s2">"1.0 0.0 1.00E+00 1.00E-09 1.00E-09"</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
<p>Create an <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> instance using these settings with:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># The --overwrite command line arg lets us overwrite possible output files.</span>
<span class="n">instance</span> <span class="o">=</span> <span class="n">FitSnap</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">arglist</span><span class="o">=</span><span class="p">[</span><span class="s2">"--overwrite"</span><span class="p">])</span>
</pre></div>
</div>
<p>Then use the <em>high level</em> functions for (1) scraping data, (2) calculating descriptors, and (3)
performing a fit:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># Scrape fitting data.</span>
<span class="n">instance</span><span class="o">.</span><span class="n">scrape_configs</span><span class="p">()</span>
<span class="c1"># Calculate descriptors.</span>
<span class="n">instance</span><span class="o">.</span><span class="n">process_configs</span><span class="p">()</span>
<span class="c1"># Fit the model.</span>
<span class="n">instance</span><span class="o">.</span><span class="n">perform_fit</span><span class="p">()</span>
<span class="c1"># Observe the errors.</span>
<span class="nb">print</span><span class="p">(</span><span class="n">instance</span><span class="o">.</span><span class="n">solver</span><span class="o">.</span><span class="n">errors</span><span class="p">)</span>
</pre></div>
</div>
<p>Each <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code> instance contains its own settings for defining an entire machine learning fit
from start to finish.
This can include training data and hyperparameters all the way to the final fitting coefficients or
model and error metrics.
This design is similar to scikit-learn, where users make instances out of model classes like
<code class="code docutils literal notranslate"><span class="pre">instance</span> <span class="pre">=</span> <span class="pre">Ridge(alpha)</span></code> and call class methods such as <code class="code docutils literal notranslate"><span class="pre">instance.fit(A,</span> <span class="pre">b)</span></code>.
With <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code>, however, we have many more settings and hyperparameters.
It therefore improves organization to contain all these attributes in a single <code class="code docutils literal notranslate"><span class="pre">FitSnap</span></code>
instance to reduce confusion about where a fit came from.
Most methods such as calculating descriptors and performing fits are methods of a particular
instance, and the actions of these methods depend on the state or settings of that instance.
These methods and the rest of the API are detailed below.</p>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>© Copyright 2022, Sandia Corporation.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>