Curve fitting in 1D
Here, a 1D curve fitting example is explored. Imagine, a synthetic data generated from \( \sin(x) \) over the range of \( [0, 2\pi] \).
To train a neural network model on this curve, you should first define a Variable
.
A neural network with three layers, each containing 10 neurons, and with tanh
activation function is then generated
using the Functional
class.
The target is imposed on the output using the Data
class from Constraint
, and passed to the SciModel
to form a
SciANN model.
```python
Curve fitting in 1D
Here, a 1D curve fitting example is explored. Imagine, a synthetic data generated from \( \sin(x) \) over the range of \( [0, 2\pi] \).
To train a neural network model on this curve, you should first define a Variable
.
A neural network with three layers, each containing 10 neurons, and with tanh
activation function is then generated
using the Functional
class.
The target is imposed on the output using the Data
class from Constraint
, and passed to the SciModel
to form a
SciANN model.
'''
import numpy as np from sciann import Variable, Functional, SciModel, Parameter from sciann.constraints import Data, MinMax import sciann as sn
Synthetic data generated from sin function over [0, 2pi]
x_true = np.linspace(0, np.pi*2, 10000) y_true = np.sin(x_true)
The network inputs should be defined with Variable.
x = Variable('x', dtype='float64') xf = Functional('xf', x) xf.set_trainable(False)
Each network is defined by Functional.
y = Functional('y', xf, [10, 10, 10], activation='tanh')
d = Parameter(2.0, inputs=x)
Define the target (output) of your model.
c1 = Data(y)
The model is formed with input x
and condition c1
.
model = SciModel(x, [c1], optimizer='adam') model.summary()
Training: .train runs the optimization and finds the parameters.
model.train(x_true, [y_true], learning_rate={"scheduler":"SineExponentialDecay", "verify": True}, batch_size=32, epochs=2, adaptive_weights={'method': "NTK", 'freq': 10, "use_score": True, "alpha": 1.} )
used to evaluate the model after the training.
y_pred = y.eval(model, x_true)
print(x_true.shape, y_pred.shape)```