본문 바로가기

딥러닝 프레임워크/Tensorflow

Tensorflow - float32 쓰는 이유

import tensorflow as tf

X = tf.placeholder(tf.float32, [None, 28*28])

Tensorflow를 공부하다 보면 위와 같이 float32를 쓴다. 왜 굳이 float32를 쓰는가에 대해 알아보려고 한다.

 

* 코드설명

- tf.placeholder: 재료를 담는 그릇을 말하며, 이미지 데이터를 학습시킨다면 이미지의 픽셀값이 저장되는 공간이다.

선언된 후 실제 코드가 실행될때 값을 꼭 전달받아야 한다.

tensorflow 2.0 이후부터는 지원하지 않는 방식이다.

 

- tf.float32: 변수의 data type을 의미한다.

 

float32는 32bits를 사용하고 float64는 64bits를 사용한다는 것인데, 이는 즉 메모리 용량 차이가 두배이다.

메모리 사용량이 두 배 차이 나므로 float64를 사용하면 연산속도가 느려질 수 있다.

하지만 float64는 float32에 비해 훨씬 정확하게 숫자를 나타낼 수 있으며 훨씬 큰 숫자도 나타낼 수 있다.

 

* 상황판단

- 출력물에 얼마나 정밀한 결과가 필요한다

- 속도, 메모리가 문제 되지 않는가

에 대해 고민해보고 적절한 값을 얻으면 된다.

나는 MNIST를 이용한 gan 생성 코드를 공부하던 중에, float32를 사용하는 예시를 보고 궁금증을 가지게 되었는데

아마 float64를 사용할 만큼 정밀할 필요가 없어 정밀도를 위해 float32를 사용했던 것 같다.

 

* Python data 형태

- int: 정수

- uint: 0 이상의 양수, 혹은 부호 없는 정수를 의미한다. unsigned int의 줄임말인데, unsinged int는 부호가 없다는 의미이다.

- float: 실수

 

데이터 타입 설명
int8

1 byte, 즉 2^8만큼 표현 가능

-128 ~ 127

int16

2^16만큼 표현 가능

-32,768 ~ 32,767

int32

2^32만큼 표현 가능

-2,147,483,648 ~ 2,147,483,647

uint8

2^8만큼 표현 가능

0 ~ 255

uint16

2^16만큼 표현 가능

0 ~ 65,535

uint32

2^32만큼 표현 가능

0 ~ 4,294,967,295

uint64

2^64만큼 표현 가능

0 ~ 18,446,744,073,709,551,615

float16

half precision을 가지는 실수형 자료형

5bit의 지수와, 10 bit의 소수로 구성된다

float32

single precision을 가지는 실수형 자료형

8bit의 지수와, 23bit의 소수로 구성

float64

double precision을 가지는 실수형 자료형

11bit의 지수와, 52bit의 소수로 구성

float_ float64의 약칭

 

 

출처: https://datadictionary.tistory.com/13

 

float32 와 float64의 차이

tensorflow 예제를 공부하던 중 궁금증이 생길 수도 있다. "x = tf.placeholder(tf.float32, [none, 784])" 라는 코드가 있는데 왜 tf.float32를 이용했을까? 잠시 코드를 설명하자면 tf.placeholder는 재료를 담..

datadictionary.tistory.com

https://kongdols-room.tistory.com/53

 

NumPy의 데이터 타입(자료형), 관련된 함수 - NumPy(2)

참고 자료 https://docs.scipy.org/doc/numpy/user/basics.types.html 파이썬 버전 3.7 기준 NumPy 버전 1.15 기준 본 포스팅에선 NumPy의 주요 자료형인 정수(int), 부호없는 정수(uint), 실수(float), 복소수(co..

kongdols-room.tistory.com