Bir tensorflow / keras sinir ağına giriş için bir numpy dizisinin hangi dtype olduğu önemli mi?
Bir tensorflow.keras modelini alıp çağırırsam model.fit(x, y)
(nerede x
ve nerede uyuşuk y
diziler) dtype
, numpy dizisinin ne olduğu önemli mi? Am Ben en iyi sadece yapmak dtype
(örneğin mümkün olduğu kadar küçük int8
ikili veriler için) ya da bu vermek tensorflow / keras ekstra çalışma bir yüzen için döküm gelir?
Yanıtlar
Bu hizmeti kullanmak için giriş kullanması gereklidir np.float32
keras için varsayılan d_type var. Bakın:
import tensorflow as tf
tf.keras.backend.floatx()
'float32'
Keras'a girdi verirseniz np.float64
, şikayet eder:
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)
UYARI: tensorflow: Katman my_model, dtype float64'ten katmanın dtype of float32'ye bir girdi tensörü atıyor, bu TensorFlow 2'de yeni bir davranıştır. Katman, dtype varsayılanı floatx olduğundan, dtype float32'ye sahiptir. Bu katmanı float32'de çalıştırmayı planladıysanız, bu uyarıyı güvenle göz ardı edebilirsiniz. Şüpheniz varsa, bu uyarı muhtemelen yalnızca bir TensorFlow 1.X modelini TensorFlow 2'ye taşıyorsanız bir sorundur. Tüm katmanları varsayılan olarak dtype float64 olacak şekilde değiştirmek için arayın
tf.keras.backend.set_floatx('float64')
. Yalnızca bu katmanı değiştirmek için, katman yapıcısına dtype = 'float64' yazın. Bu katmanın yazarıysanız, temel Katman yapıcısına autocast = False değerini ileterek otomatik yayını devre dışı bırakabilirsiniz.
Tensorflow'u kuantizasyon olarak adlandırılan 8 bit giriş ile eğitim için kullanmak mümkündür . Ancak çoğu durumda zorlayıcı ve gereksizdir (yani, modellerinizi uç cihazlara yerleştirmeniz gerekmedikçe).
tl; dr girdinizi içeride tutun np.float32
. Ayrıca bu gönderiye bakın .