Le type de dtype d'un tableau numpy est-il important pour l'entrée dans un réseau neuronal tensorflow / keras?
Si je prends un modèle tensorflow.keras et que j'appelle model.fit(x, y)
(où x
et y
sont les tableaux numpy), est-ce que dtype
le tableau numpy est important? Suis-je préférable de rendre le dtype
plus petit possible (par exemple int8
pour les données binaires) ou est-ce que cela donne un travail supplémentaire à tensorflow / keras pour le convertir en flottant?
Réponses
Vous devez np.float32
convertir votre entrée en , c'est le dtype par défaut pour Keras. Cherchez-le:
import tensorflow as tf
tf.keras.backend.floatx()
'float32'
Si vous donnez l'entrée à Keras np.float64
, il se plaindra:
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)
AVERTISSEMENT: tensorflow: Layer my_model convertit un tenseur d'entrée de dtype float64 au dtype de la couche float32, qui est un nouveau comportement dans TensorFlow 2. La couche a dtype float32 car c'est dtype par défaut à floatx. Si vous aviez l'intention d'exécuter cette couche dans float32, vous pouvez ignorer cet avertissement en toute sécurité. En cas de doute, cet avertissement n'est probablement un problème que si vous portez un modèle TensorFlow 1.X vers TensorFlow 2. Pour modifier toutes les couches afin qu'elles aient dtype float64 par défaut, appelez
tf.keras.backend.set_floatx('float64')
. Pour modifier uniquement cette couche, passez dtype = 'float64' au constructeur de couches. Si vous êtes l'auteur de cette couche, vous pouvez désactiver la diffusion automatique en transmettant autocast = False au constructeur de la couche de base.
Il est possible d'utiliser Tensorflow pour l'entraînement avec une entrée 8 bits , appelée quantification. Mais c'est difficile et inutile dans la plupart des cas (c'est-à-dire à moins que vous n'ayez besoin de déployer vos modèles sur des périphériques de périphérie).
tl; dr garder votre entrée np.float32
. Voir aussi cet article .