()
| 370 | |
| 371 | #[test] |
| 372 | fn test_feedforward() { |
| 373 | |
| 374 | // parameters |
| 375 | let params1 = mat![ |
| 376 | 0.1, 0.2, 0.4; |
| 377 | 0.2, 0.1, 2.0 |
| 378 | ]; |
| 379 | |
| 380 | let params2 = mat![ |
| 381 | 0.8, 1.2, 0.6; |
| 382 | 0.4, 0.5, 0.8; |
| 383 | 1.4, 1.5, 2.0 |
| 384 | ]; |
| 385 | |
| 386 | let n = NeuralNetwork::new() |
| 387 | .add_layer(3) |
| 388 | .add_layer(2) |
| 389 | .add_layer(3) |
| 390 | .set_params(0, params1) |
| 391 | .set_params(1, params2); |
| 392 | |
| 393 | let (a, z) = n.feedforward(&[0.5, 1.2, 1.5]); |
| 394 | |
| 395 | assert_eq!(a.len(), 3); |
| 396 | assert_eq!(z.len(), 3); |
| 397 | assert_eq!(z[0], vec![0.5, 1.2, 1.5]); |
| 398 | assert_eq!(a[0], vec![0.5, 1.2, 1.5]); |
| 399 | assert!(z[1].similar(&vec![0.89, 3.22], 0.001)); |
| 400 | assert!(a[1].similar(&vec![1.0, 0.70889, 0.96158], 0.00001)); |
| 401 | assert!(z[2].similar(&vec![2.2276, 1.5237, 4.3865], 0.0001)); |
| 402 | assert!(a[2].similar(&vec![0.90270, 0.82108, 0.98771], 0.00001)); |
| 403 | |
| 404 | let d = n.backprop(&a[2].clone(), &[2.7, 3.1, 1.5], &(a, z)); |
| 405 | assert!(d[0].similar(&vec![-0.1578584, -0.3347843, -0.0062193], 0.0000002)); |
| 406 | assert!(d[1].similar(&vec![-0.075561, -0.013853], 0.000002)); |
| 407 | |
| 408 | // TODO: test a 4 layer network |
| 409 | } |
| 410 | |
| 411 | |
| 412 | #[test] |
nothing calls this directly
no test coverage detected