tensorflow / keras 신경망에 입력하기위한 numpy 배열의 dtype이 중요합니까?

Aug 15 2020

tensorflow.keras 모델을 가져 와서 model.fit(x, y)(where xand yare numpy arrays) dtypenumpy 배열이 무엇인지 중요 합니까? dtype가능한 한 작게 만드는 것이 가장 int8좋습니까 (예 : 이진 데이터의 경우) 아니면 tensorflow / keras를 부동으로 캐스팅하는 추가 작업을 제공합니까?

답변

1 NicolasGervais Aug 15 2020 at 17:20

np.float32Keras의 기본 dtype 인으로 입력을 캐스팅해야합니다 . 찾아보세요 :

import tensorflow as tf
tf.keras.backend.floatx()
'float32'

에서 Keras 입력을 주면 np.float64다음과 같이 불평합니다.

import tensorflow as tf
from tensorflow.keras.layers import Dense 
from tensorflow.keras import Model
from sklearn.datasets import load_iris
iris, target = load_iris(return_X_y=True)

X = iris[:, :3]
y = iris[:, 3]

ds = tf.data.Dataset.from_tensor_slices((X, y)).shuffle(25).batch(8)

class MyModel(Model):
  def __init__(self):
    super(MyModel, self).__init__()
    self.d0 = Dense(16, activation='relu')
    self.d1 = Dense(32, activation='relu')
    self.d2 = Dense(1, activation='linear')

  def call(self, x):
    x = self.d0(x)
    x = self.d1(x)
    x = self.d2(x)
    return x

model = MyModel()

_ = model(X)

경고 : tensorflow : Layer my_model은 입력 텐서를 dtype float64에서 레이어의 dtype 인 float32로 캐스팅합니다. 이는 TensorFlow 2의 새로운 동작입니다.이 레이어에는 dtype이 float32로 기본 설정되어 있으므로 dtype float32가 있습니다. 이 계층을 float32에서 실행하려는 경우이 경고를 무시해도됩니다. 확실하지 않은 경우이 경고는 TensorFlow 1.X 모델을 TensorFlow 2로 포팅하는 경우에만 문제가 될 수 있습니다 tf.keras.backend.set_floatx('float64'). 기본적으로 dtype float64를 갖도록 모든 레이어를 변경하려면 . 이 레이어 만 변경하려면 dtype = 'float64'를 레이어 생성자에 전달합니다. 이 레이어의 작성자 인 경우 autocast = False를 기본 레이어 생성자에 전달하여 자동 캐스팅을 비활성화 할 수 있습니다.

양자화라고하는 8 비트 입력으로 학습하는 데 Tensorflow를 사용할 수 있습니다 . 그러나 대부분의 경우 어렵고 불필요합니다 (예 : 에지 장치에 모델을 배포 할 필요가없는 경우).

tl; dr 은 입력을 np.float32. 이 게시물을 참조하십시오 .