Comment convertir un jeu de données [:, 28,28] sur [:, 28,28,3] dans Tensorflow 2.0 +?
3 Réponses :
Vous pouvez envelopper ces opérations numpues commentées à l'intérieur d'un tf.py_function (my_transform) code>, puis tout cela à l'intérieur .map () code>. Cela l'exécutera en mode désireux, donc pas de compromis avec la vitesse aussi. Vous pouvez lire plus ici . Pour un exemple de travail, vous pouvez suivre Ceci . P>
J'ai résolu le problème de la manière suivante.
import tensorflow_datasets as tfds
import tensorflow as tf
(train_data, test_data) = tfds.load('mnist', split=['train', 'test'], as_supervised=True)
train_data = train_data.map(lambda data, label: (tf.image.grayscale_to_rgb(tf.image.resize(data, [28,28])), label)).batch(10)
Autres solutions.
import tensorflow_datasets as tfds
import tensorflow as tf
import matplotlib.pyplot as plt
(train_data, test_data) = tfds.load('mnist', split=['train', 'test'], as_supervised=True)
# method 1
# # train_data = train_data.map(lambda data, label: (tf.image.grayscale_to_rgb(data/255), label)).batch(10)
# method 2
# train_data = train_data.map(lambda data, label: (tf.concat([data/255,tf.zeros(data.shape),tf.zeros(data.shape)],-1), label)).batch(10)
# method 3
def my_transform(data, label):
#data = tf.expand_dims(data/255, -1)
data=data/255
ex_col = tf.zeros(data.shape)
data = tf.concat([data, ex_col, ex_col], -1)
return data, label
train_data = train_data.map(my_transform).batch(10)
for datas, labels in train_data:
for i in range(len(datas)):
print(datas[i], labels[i])
plt.imshow(datas[i])
plt.show()