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
https://kongdols-room.tistory.com/53