Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
lib4neuro
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MolDyn
lib4neuro
Commits
ce427787
Commit
ce427787
authored
5 years ago
by
Martin Beseda
Browse files
Options
Downloads
Patches
Plain Diff
[ENH] Added parameters to ACSF optimizer to make the parameters' fitting more flexible.
parent
851e118a
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/SymmetryFunction/ACSFParametersOptimizer.cpp
+25
-17
25 additions, 17 deletions
src/SymmetryFunction/ACSFParametersOptimizer.cpp
src/SymmetryFunction/ACSFParametersOptimizer.h
+9
-0
9 additions, 0 deletions
src/SymmetryFunction/ACSFParametersOptimizer.h
with
34 additions
and
17 deletions
src/SymmetryFunction/ACSFParametersOptimizer.cpp
+
25
−
17
View file @
ce427787
...
...
@@ -30,19 +30,30 @@ lib4neuro::ACSFParametersOptimizer::ACSFParametersOptimizer(lib4neuro::ErrorFunc
void
lib4neuro
::
ACSFParametersOptimizer
::
fit_ACSF_parameters
(
std
::
vector
<
SYMMETRY_FUNCTION_PARAMETER
>&
fitted_params
,
bool
random_init_params
)
{
fit_ACSF_parameters
(
fitted_params
,
random_init_params
,
30
,
10
,
1e-5
,
0.98
,
0.085
,
1e-6
);
}
void
lib4neuro
::
ACSFParametersOptimizer
::
fit_ACSF_parameters
(
std
::
vector
<
SYMMETRY_FUNCTION_PARAMETER
>&
fitted_params
,
bool
random_init_params
,
unsigned
int
main_iterations_num
,
unsigned
int
steady_temperature_iters_num
,
double
init_temperature
,
double
temperature_change
,
double
distribution_stddev
,
double
termination_threshold
)
{
COUT_INFO
(
"Starting optimizing of ACSF parameters..."
);
/* Seed the random numbers' generator */
std
::
random_device
rd
{};
std
::
mt19937
gen
{
rd
()};
// GradientDescentBB gd(1e-6,
// 1000,
// 10000);
//
// LevenbergMarquardt lm(1000);
/* Construct and train a new linear neural network to evaluate the chosen symmetry functions' parameters */
std
::
vector
<
unsigned
int
>
neuron_numbers
=
{
static_cast
<
unsigned
int
>
(
this
->
net
->
get_input_neurons_number
()),
1
};
std
::
vector
<
NEURON_TYPE
>
type_hidden_neurons
=
{};
...
...
@@ -81,16 +92,16 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
double
current_error
;
double
delta_error
;
double
temperature
=
3e-4
;
//TODO make flexible by adding function parameters
double
temperature
=
init_temperature
;
//TODO make flexible by adding function parameters
MSE
mse_init
(
&
nn
,
this
->
data_set
);
previous_error
=
mse_init
.
eval
();
/* Iteratively improve the parameters */
unsigned
int
iter_ind
=
0
;
for
(
unsigned
int
i
=
0
;
i
<
10
;
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
main_iterations_num
;
i
++
)
{
/* Temperature iterations */
for
(
unsigned
int
j
=
0
;
j
<
10
;
j
++
)
{
for
(
unsigned
int
j
=
0
;
j
<
steady_temperature_iters_num
;
j
++
)
{
/* Change the selected parameters in ACSFs */
for
(
auto
&
el
:
*
this
->
net
->
get_elements
())
{
for
(
auto
&
func
:
*
el
.
second
->
getSymmetryFunctions
())
{
...
...
@@ -103,7 +114,7 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
func
->
set_parameter
(
param
.
first
,
shift_max_vals
.
at
((
int
)
(
d_uni
(
gen
))));
}
else
{
std
::
normal_distribution
<>
dd
{
param
.
second
,
0.085
};
std
::
normal_distribution
<>
dd
{
param
.
second
,
distribution_stddev
};
func
->
set_parameter
(
param
.
first
,
dd
(
gen
));
}
...
...
@@ -124,18 +135,16 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
MSE
mse
(
&
nn
,
this
->
data_set
);
// gd.optimize(mse);
std
::
vector
<
double
>
new_weights
=
arma
::
conv_to
<
std
::
vector
<
double
>>::
from
(
arma
::
solve
(
*
this
->
data_set
->
get_inputs_matrix
(),
*
this
->
data_set
->
get_outputs_matrix
(),
arma
::
solve_opts
::
fast
));
*
this
->
data_set
->
get_outputs_matrix
(),
arma
::
solve_opts
::
fast
));
nn
.
copy_parameter_space
(
&
new_weights
);
current_error
=
mse
.
eval
();
/* Termination condition */
if
(
current_error
<
10e-6
)
{
if
(
current_error
<
termination_threshold
)
{
COUT_INFO
(
"Error when optimizing ACSF parameters: "
+
std
::
to_string
(
current_error
));
return
;
}
...
...
@@ -162,10 +171,9 @@ void lib4neuro::ACSFParametersOptimizer::fit_ACSF_parameters(std::vector<SYMMETR
previous_error
=
current_error
;
std
::
cout
<<
"it: "
<<
iter_ind
<<
" Delta error: "
<<
delta_error
<<
std
::
endl
;
iter_ind
++
;
}
temperature
*=
0.98
;
temperature
*=
temperature_change
;
}
}
This diff is collapsed.
Click to expand it.
src/SymmetryFunction/ACSFParametersOptimizer.h
+
9
−
0
View file @
ce427787
...
...
@@ -26,6 +26,15 @@ namespace lib4neuro {
LIB4NEURO_API
void
fit_ACSF_parameters
(
std
::
vector
<
SYMMETRY_FUNCTION_PARAMETER
>&
fitted_params
,
bool
random_init_params
);
LIB4NEURO_API
void
fit_ACSF_parameters
(
std
::
vector
<
SYMMETRY_FUNCTION_PARAMETER
>&
fitted_params
,
bool
random_init_params
,
unsigned
int
main_iterations_num
,
unsigned
int
steady_temperature_iters_num
,
double
init_temperature
,
double
temperature_change
,
double
distribution_stddev
,
double
termination_threshold
);
};
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment