Je suis nouveau à Tensorflow et Deep Learning et ma première tâche est de faire une classification binaire de tableaux à partir d'images en niveaux de gris. Mes tableaux (tableau_a à tableau_h) dans ce code devraient servir d'exemple.
J'ai plusieurs tableaux (tableau_a à tableau_h) de la forme (300x300) avec des zéros et des uns. Ces tableaux doivent être utilisés comme données d'apprentissage (x_train). Je veux étiqueter ces tableaux avec un autre tableau (label_array_train) de la forme (8x1). Ce tableau doit être mon entrée en tant que y_train ou données cibles.
Mon idée était de concaténer mes tableaux en un seul tableau avec np.concatenate pour le convertir en un tenseur et le transmettre à mon NN. J'utilise également tf.convert_to_tensor sur mon label_array_train pour obtenir un autre tenseur. Je veux étiqueter chaque tableau avec une étiquette de la formation label_array_train (0 ou 1). Les tableaux avec des zéros doivent être étiquetés avec 0 et les tableaux avec des uns doivent être étiquetés avec 1. J'obtiens une erreur à cause de mes différentes tailles de données. Mais je ne sais pas comment manipuler ou préparer correctement mes données d'entrée pour obtenir la forme et la taille parfaites de mes données de formation et des étiquettes.
Je reçois cette erreur :
Data cardinality is ambiguous:
x sizes: 2400
y sizes: 8
Make sure all arrays contain the same number of samples.
File "C:\Users\Niklas\Desktop\Python\Versuch 3.py", line 94, in <module>
model.fit(train_data,...
mon code :
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, AvgPool2D
from tensorflow.keras.optimizers import Adam
import numpy as np
mes tableaux d'entraînement avec des zéros et des uns sous la forme de 300,300
array_a= np.zeros((300,300))
array_b= np.ones((300,300))
array_c= np.ones((300,300))
array_d= np.zeros((300,300))
array_e= np.zeros((300,300))
array_f= np.zeros((300,300))
array_g= np.zeros((300,300))
array_h= np.ones((300,300))
mon tableau pour étiqueter tous les tableaux de train_data
label_array_train = np.array([0,1,1,0,0,0,0,1], dtype = np.float)
Concaténation de tous les tableaux en un seul
train_array = np.concatenate((array_a,array_b,array_c,array_d,array_e,array_f,array_g,array_h), axis=0)
le transformer en un tenseur pour la compatibilité avec Tensorflow
train_data = tf.convert_to_tensor(train_array, np.float32)
labels = tf.convert_to_tensor(label_array_train, np.float32)
mon modèle
model = Sequential([Conv2D(filters= 32, kernel_size= (3, 3), activation= 'relu', input_shape = (300,300,1)),
AvgPool2D(2, 2),
Conv2D(filters= 32, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Conv2D(filters= 64, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Conv2D(filters= 64, kernel_size= (3, 3), activation= 'relu'),
AvgPool2D(2, 2),
Flatten(),
Dense(units= 512, activation= 'relu'),
Dense(units= 1, activation= 'sigmoid')])
model.compile(optimizer=Adam (learning_rate= 0.0005),
loss= 'binary_crossentropy',
metrics= ['accuracy'])
model.fit(train_data,
labels,
epochs=5,
verbose=1)
Forme de mes données d'entraînement avec print(train_array) :
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]], shape=(2400, 300), dtype=float32)
Forme de mes étiquettes avec print(labels) :
tf.Tensor([0. 1. 1. 0. 0. 0. 0. 1.], shape=(8,), dtype=float32)
J'espère que quelqu'un pourra m'aider et me montrer mes erreurs dans mon code ou me montrer comment le faire correctement.