Ist es wichtig, welchen Typ ein Numpy-Array für die Eingabe in ein neuronales Tensorflow / Keras-Netzwerk hat?

Aug 15 2020

Wenn ich ein tensorflow.keras-Modell nehme und aufrufe model.fit(x, y)(wo xund ysind numpy-Arrays), spielt es dann eine Rolle, was dtypedas numpy-Array ist? Ist es am besten, das dtypeso klein wie möglich zu machen (z. B. int8für Binärdaten) oder gibt dies Tensorflow / Keras zusätzliche Arbeit, um es in einen Float umzuwandeln?

Antworten

1 NicolasGervais Aug 15 2020 at 17:20

Sie sollten Ihre Eingabe in np.float32umwandeln, das ist der Standard-D-Typ für Keras. Schlag es nach:

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

Wenn Sie Keras eingeben np.float64, wird es sich beschweren:

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)

WARNUNG: Tensorflow: Layer my_model wandelt einen Eingabetensor vom dtype float64 in den dtype float32 des Layers um. Dies ist ein neues Verhalten in TensorFlow 2. Der Layer hat den dtype float32, da dtype standardmäßig floatx ist. Wenn Sie diese Ebene in float32 ausführen möchten, können Sie diese Warnung ignorieren. Im Zweifelsfall ist diese Warnung wahrscheinlich nur dann ein Problem, wenn Sie ein TensorFlow 1.X-Modell auf TensorFlow 2 portieren. Rufen Sie auf, um alle Ebenen so zu ändern, dass sie standardmäßig den Typ float64 haben tf.keras.backend.set_floatx('float64'). Um nur diese Ebene zu ändern, übergeben Sie dtype = 'float64' an den Ebenenkonstruktor. Wenn Sie der Autor dieses Layers sind, können Sie das Autocasting deaktivieren, indem Sie autocast = False an den Basisebenenkonstruktor übergeben.

Es ist möglich, Tensorflow für das Training mit 8-Bit-Eingang zu verwenden , was als Quantisierung bezeichnet wird. In den meisten Fällen ist dies jedoch schwierig und unnötig (es sei denn, Sie müssen Ihre Modelle auf Edge-Geräten bereitstellen).

tl; dr behalten Sie Ihre Eingabe in np.float32. Siehe auch diesen Beitrag .