Apakah penting jenis dtype array numpy untuk input ke jaringan tensorflow / keras neural?
Jika saya mengambil model tensorflow.keras dan memanggil model.fit(x, y)
(di mana x
dan y
merupakan array numpy) apakah penting apa dtype
array numpy itu? Apakah saya sebaiknya membuat dtype
sekecil mungkin (misalnya int8
untuk data biner) atau apakah ini memberikan kerja ekstra tensorflow / keras untuk melemparkannya ke pelampung?
Jawaban
Anda harus mentransmisikan masukan Anda ke np.float32
, itulah tipe dtype default untuk Keras. Cari itu:
import tensorflow as tf
tf.keras.backend.floatx()
'float32'
Jika Anda memberikan masukan Keras np.float64
, itu akan mengeluh:
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)
PERINGATAN: tensorflow: Lapisan my_model mentransmisikan tensor masukan dari dtype float64 ke dtype float32 pada lapisan, yang merupakan perilaku baru di TensorFlow 2. Lapisan tersebut memiliki dtype float32 karena dtype defaultnya adalah floatx. Jika Anda bermaksud menjalankan lapisan ini di float32, Anda dapat mengabaikan peringatan ini dengan aman. Jika ragu, peringatan ini kemungkinan hanya menjadi masalah jika Anda mem-porting model TensorFlow 1.X ke TensorFlow 2. Untuk mengubah semua lapisan agar memiliki dtype float64 secara default, panggil
tf.keras.backend.set_floatx('float64')
. Untuk mengubah hanya lapisan ini, berikan dtype = 'float64' ke konstruktor lapisan. Jika Anda adalah pembuat lapisan ini, Anda dapat menonaktifkan autocasting dengan meneruskan autocast = False ke konstruktor Lapisan dasar.
Tensorflow dapat digunakan untuk pelatihan dengan input 8bit , yang disebut kuantisasi. Tetapi ini menantang dan tidak perlu dalam banyak kasus (yaitu, kecuali jika Anda perlu menerapkan model Anda pada perangkat edge).
tl; dr simpan masukan Anda np.float32
. Lihat juga posting ini .