Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[Rust] 손실 함수 - '밑바닥부터 시작하는 딥러닝' 4장 본문
※ 실제로 동작하는 전체 소스코드는 GitHub에서 보실 수 있습니다.
손실 함수는 신경망의 학습 정도를 수치화하는데 사용되는 함수입니다.
손실 함수의 값을 최소화하는 방향으로 신경망의 파라미터들을 조정하는게 학습입니다.
여러 종류가 있는데 보통은 어떤 문제를 푸느냐에 따라 다른 함수를 사용하는 것 같습니다.
아래 코드는 대표적인 손실 함수인 MSE와 Cross entropy를 구현하고 손실값을 계산해보는 예제입니다.
코드:
use rulinalg::matrix::{Matrix, BaseMatrix, BaseMatrixMut};
pub fn mean_squared_error(y: &Matrix<f32>, t: &Matrix<f32>) -> f32 {
let mut err = y - t;
err = err.apply(&|v| v * v);
err.sum() * 0.5
}
pub fn cross_entropy_error(y: &Matrix<f32>, t: &Matrix<f32>) -> f32 {
let temp = y + 1e-7;
let temp = t.elemul(&temp.apply(&|v| v.log(10.0)));
-temp.sum() / y.rows() as f32
}
fn test_loss() {
let y = matrix![0.2, 0.1, 0.7;
1.0, 0.0, 0.0;
0.4, 0.5, 0.1f32];
let t = matrix![0.0, 0.0, 1.0;
1.0, 0.0, 0.0;
1.0, 0.0, 0.0];
println!("MSE: {}", loss::mean_squared_error(&y, &t));
println!("CEE: {}", loss::cross_entropy_error(&y, &t));
}
결과:
MSE: 0.38 CEE: 0.18428057
'개발 및 공부 > 알고리즘' 카테고리의 다른 글
[Rust] 2층 신경망으로 MNIST 학습 - '밑바닥부터 시작하는 딥러닝' 4장 (0) | 2018.07.15 |
---|---|
[Rust] 경사 하강법 - '밑바닥부터 시작하는 딥러닝' 4장 (0) | 2018.07.15 |
[Rust] 활성화 함수 - '밑바닥부터 시작하는 딥러닝' 3장 (0) | 2018.07.14 |
[Rust] 퍼셉트론 - '밑바닥부터 시작하는 딥러닝' 2장 (0) | 2018.07.14 |
[Rust] 퍼셉트론 (0) | 2018.07.13 |
Comments