1. ホーム
  2. Python

float32とfloat64の本質的な違い(ディープラーニングへの型影響とpythonの活用)。

2022-02-20 04:58:11

まず、ビットとバイトとは何か?

  1. bits:名前付きビット
  2. bytes:はバイト数
  3. 単純な数字で言うとMBとGの関係です! つまり8bits=1bytesで、単位の相互変換はこちら!

 では、float32とfloat64の違いは何でしょうか?

  1. 桁数の違い
  2. 1つは、それぞれ32ビットと64ビットのメモリを占有し、4バイトまたは8バイトとなる
  3. ビット数が多いほど浮動小数点数の精度は高くなる

ディープラーニングの計算効率に影響を与えるか?

float64はfloat32の2倍、float16の4倍のメモリを消費します。例えば、CIFAR10データセットでは、float64で表現すると60,000*32*3*8/1024*3=1.4Gかかり、データセットをメモリに転送するだけで1.4Gかかるのに対し、float32であれば、わずか0.4Gで済みます。 7G、float16を使用する場合は、0.35G程度を必要とし、メモリの量を占有し、システムの動作効率に深刻な影響を与える。

Pandasのデータ型別メモリ消費量テーブル

Pythonはnumpyを使用してデータ型をfloat32に設定する

import numpy as np
data = np.array([1,2,3,4,5,6,7,8,9],dtype='float32')

float32と64のメモリフットプリントのpandas解析

pandasが高速なのは、データをメモリにロードして処理するためです。ここでは、pandasを使ってデータを別々にロードすることで、同じデータが異なるデータ型に対してどのようにメモリを消費するのかを見てみましょう〜。

import pandas as pd
data = pd.DataFrame([1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9], dtype="float64")

data1 = pd.DataFrame([1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9], dtype="float32")

print(data.info(memory_usage=True))
print(data1.info(memory_usage=True))

 結果は次のように出力されます。あとは、どれだけのメモリを使用しているかを確認するだけです。 float64のデータは192byte、float32のデータは160byteを消費します。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8件、0~7
データ列(合計1列)。
 # 列の非NULL数 D型  
--- ------ -------------- -----  
 0 0 8 非NULL float64
dtypes: float64(1)
メモリ使用量 192.0 bytes -----------------> メモリ使用量サイズ
なし
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8件、0~7
データ列(合計1列)。
 # 列の非NULL数 D型  
--- ------ -------------- -----  
 0 0 8 非Nullのfloat32
dtypes: float32(1)
メモリ使用量 160.0 bytes ----------------->メモリ使用量サイズ
なし