Le type de dtype d'un tableau numpy est-il important pour l'entrée dans un réseau neuronal tensorflow / keras?

Aug 15 2020

Si je prends un modèle tensorflow.keras et que j'appelle model.fit(x, y)(où xet ysont les tableaux numpy), est-ce que dtypele tableau numpy est important? Suis-je préférable de rendre le dtypeplus petit possible (par exemple int8pour les données binaires) ou est-ce que cela donne un travail supplémentaire à tensorflow / keras pour le convertir en flottant?

Réponses

1 NicolasGervais Aug 15 2020 at 17:20

Vous devez np.float32convertir 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 .