use newron::dataset::{RowType, Dataset, ColumnType};
use newron::layers::LayerEnum::*;
use newron::sequential::Sequential;
use newron::loss::{mse::MSE};
use newron::metrics::Metric;
use newron::optimizers::sgd::SGD;
fn main() {
let mut data = Vec::new();
for x in -10..10 {
let x = x as f64;
let y = 0.2 * x + 2.0;
data.push(vec![x, y]);
}
let mut dataset = Dataset::from_raw_data(data).unwrap();
dataset.split_train_test(0.6, true);
let mut model = Sequential::new();
model.add(Dense{input_units: 1, output_units:1});
model.compile(MSE{},
SGD::new(0.0002),
vec![Metric::Accuracy]);
model.summary();
model.fit(&dataset, 200, true);
println!("\n\nEstimated equation :\n{:?}", model.layers[0]);
let value_to_predict = 4.6;
let prediction = model.predict(&vec![value_to_predict]).get_value(0, 0);
let true_value = 0.2 * value_to_predict + 2.0;
println!(
"Prediction for X={} -> Y={:.4} (true value={:.4})",
&value_to_predict, &prediction, &true_value
);
}