Frobenius Norm 이란 무엇인가? Numpy, TensorFlow, PyTorch에서의 Frobenius Norm 계산법 알아보기

2024. 7. 19. 07:01·Machine Learning Math/Linear Algebra
반응형

Frobenius Norm 이란 무엇인가?

Frobenius Norm은 행렬의 크기를 측정하는데 사용하는 Norm으로 행렬의 모든 원소를 제곱한 값을 합한 다음 제곱근을 한 값으로 정의된다. 벡터의 L2 Norm(유클리드 놈)을 행렬에 적용한 형태이다. 수식은 다음과 같다.

 

$$\| X \|_F = \sqrt{\sum_{i=1}^{m} \sum_{j=1}^{n} |x_{ij}|^2}$$

 

예를 들어 다음과 같은 행렬이 주어 졌을 때

 

$A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}$

 

Frobenius Norm은 다음과 같이 계산된다.

 

$\| A \|_F = \sqrt{1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2} = \sqrt{1 + 4 + 9 + 16 + 25 + 36} = \sqrt{91} \approx 9.54$

 

 

Numpy을 사용한 Frobenius Norm 계산

Numpy를 사용해 Frobenius Norm을 계산하려면 linalg.norm 함수의 첫째 값으로 행렬 X를 넘기고 두번째 인자로 "fro" 값을 넘기면 된다.

import numpy as np

# 행렬 정의
X = np.array([[1, 2, 3], [4, 5, 6]])

# 프로베니우스 놈 계산
frobenius_norm = np.linalg.norm(X, 'fro')
print("Frobenius Norm:", frobenius_norm)

 

혹은  linalg.norm 함수의 첫째 값으로 행렬 X만 넘겨도 된다.

frobenius_norm = np.linalg.norm(X)

 

 

코드 실행 결과는 다음과 같다.

Frobenius Norm: 9.539392014169456

 

 

 

TensorFlow를 사용한 Frobenius Norm 계산

TensorFlow를 사용해 Frobenius Norm을 계산하려면 tf.norm 함수를 사용하고, ord='euclidean'를 넘기면 된다.

import tensorflow as tf

# 행렬 정의
X = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)

# 프로베니우스 놈 계산
frobenius_norm = tf.norm(X, ord='euclidean')
print("Frobenius Norm:", frobenius_norm.numpy())

 

 

혹은 tf.norm 함수에 X만 넘겨도 된다.

frobenius_norm = tf.norm(X)

 

코드 실행 결과는 다음과 같다.

Frobenius Norm: 9.539392

 

 

PyTorch를 사용한 Frobenius Norm 계산

PyTorch를 사용해 Frobenius Norm을 계산하려면 torch.norm 함수를 사용하고, p='fro'를 설정하면 된다.

import torch

# 행렬 정의
X = torch.tensor([[1, 2, 3], [4, 5, 6]], dtype=torch.float32)

# 프로베니우스 놈 계산
frobenius_norm = torch.norm(X, p='fro')
print("Frobenius Norm:", frobenius_norm.item())

 

혹은 torch.norm 함수에 X만 넘겨도 된다.

frobenius_norm = torch.norm(X)

 

코드 실행 결과는 다음과 같다.

Frobenius Norm: 9.539392471313477

 

 

인자에 아무것도 안넘겨도 Frobenius Norm 이 나오는 이유는, Frobenius Norm 는 Tensor의 기본적인 크기를 구하는 Norm과 같은 방식으로 동작하기 때문이다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Machine Learning Math > Linear Algebra' 카테고리의 다른 글

가우스 조던 소거법(Gauss-Jordan Elimination) 알아보기  (0) 2024.07.21
대칭 행렬(Symmetric Matrix)와 단위 행렬(Identity Matrix) 한 번에 정리하기: Numpy, TensorFlow, PyTorch 사용해 단위 행렬 만들기  (0) 2024.07.20
Tensor 사칙 연산, 아다마르 곱셈(Hadamard Product) 한 번에 정리하기: Numpy, TensorFlow, PyTorch에서의 사용법 정리  (0) 2024.07.18
기저 벡터(Basis Vector)와 직교 벡터(Orthogonal Vector)  (1) 2024.07.17
L1 Norm, L2 Norm, Squared L2 Norm, Infinity Norm 한 번에 정리하기 : Numpy, TensorFlow, PyTorch 에서 사용하기  (0) 2024.07.16


'Machine Learning Math/Linear Algebra' 카테고리의 다른 글
  • 가우스 조던 소거법(Gauss-Jordan Elimination) 알아보기
  • 대칭 행렬(Symmetric Matrix)와 단위 행렬(Identity Matrix) 한 번에 정리하기: Numpy, TensorFlow, PyTorch 사용해 단위 행렬 만들기
  • Tensor 사칙 연산, 아다마르 곱셈(Hadamard Product) 한 번에 정리하기: Numpy, TensorFlow, PyTorch에서의 사용법 정리
  • 기저 벡터(Basis Vector)와 직교 벡터(Orthogonal Vector)
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    코루틴 Flow
    Machine Learning
    pytorch
    mockito
    TensorFlow
    numpy
    unit testing
    코루틴
    junit
    Coroutines Context
    컨테이너
    unit test
    Coroutines Flow
    Coroutines Channel
    Kotlin
    Docker
    coroutine
    Coroutines
    코루틴 채널
    도커
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
Frobenius Norm 이란 무엇인가? Numpy, TensorFlow, PyTorch에서의 Frobenius Norm 계산법 알아보기
상단으로

티스토리툴바