¿Importa cuál es el tipo de matriz numérica para la entrada en una red neuronal tensorflow / keras?

Aug 15 2020

Si tomo un modelo tensorflow.keras y llamo model.fit(x, y)(dónde xy yestán las matrices numpy), ¿importa cuál es dtypela matriz numpy? ¿Es mejor hacer lo dtypemás pequeño posible (por ejemplo, int8para datos binarios) o esto le da a tensorflow / keras un trabajo adicional para convertirlo en un flotador?

Respuestas

1 NicolasGervais Aug 15 2020 at 17:20

Debe np.float32enviar su entrada a , ese es el tipo de dtipo predeterminado para Keras. Búscalo:

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

Si le da entrada a Keras np.float64, se quejará:

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)

ADVERTENCIA: tensorflow: la capa my_model está enviando un tensor de entrada de dtype float64 al dtype de la capa de float32, que es un nuevo comportamiento en TensorFlow 2. La capa tiene dtype float32 porque su valor predeterminado de dtype es floatx. Si tenía la intención de ejecutar esta capa en float32, puede ignorar esta advertencia con seguridad. En caso de duda, es probable que esta advertencia solo sea un problema si está transfiriendo un modelo de TensorFlow 1.X a TensorFlow 2. Para cambiar todas las capas para que tengan dtype float64 de forma predeterminada, llame a tf.keras.backend.set_floatx('float64'). Para cambiar solo esta capa, pase dtype = 'float64' al constructor de la capa. Si es el autor de esta capa, puede deshabilitar la transmisión automática pasando autocast = False al constructor de la capa base.

Es posible utilizar Tensorflow para entrenar con una entrada de 8 bits , lo que se denomina cuantificación. Pero es desafiante e innecesario en la mayoría de los casos (es decir, a menos que necesite implementar sus modelos en dispositivos periféricos).

tl; dr mantenga su entrada en np.float32. Vea también esta publicación .