Tensorflow : logits and labels must have the same first dimension Tensorflow : logits and labels must have the same first dimension python python

Tensorflow : logits and labels must have the same first dimension


The problem is in your target shape and is related to the correct choice of an appropriate loss function. you have 2 possibilities:

1. possibility: if you have 1D integer encoded target, you can use sparse_categorical_crossentropy as loss function

n_class = 3n_features = 100n_sample = 1000X = np.random.randint(0,10, (n_sample,n_features))y = np.random.randint(0,n_class, n_sample)inp = Input((n_features,))x = Dense(128, activation='relu')(inp)out = Dense(n_class, activation='softmax')(x)model = Model(inp, out)model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])history = model.fit(X, y, epochs=3)

2. possibility: if you have one-hot encoded your target in order to have 2D shape (n_samples, n_class), you can use categorical_crossentropy

n_class = 3n_features = 100n_sample = 1000X = np.random.randint(0,10, (n_sample,n_features))y = pd.get_dummies(np.random.randint(0,n_class, n_sample)).valuesinp = Input((n_features,))x = Dense(128, activation='relu')(inp)out = Dense(n_class, activation='softmax')(x)model = Model(inp, out)model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])history = model.fit(X, y, epochs=3)


I resolved it changing from sparse_categorical_crossentropy to categorical_crossentropy and is now running fine.


I already had this problem in my first time using tensorflow, i figured out that my problem was forgetting to add the attribute class_mode='sparse' / class_mode='binary' to the function that uploads tha training data and validation data :

So try to look after the class_mode option

image_gen_val = ImageDataGenerator(rescale=1./255)val_data_gen = image_gen_val.flow_from_directory(batch_size=batch_size,                                                 directory=val_dir,                                                 target_size=(IMG_SHAPE, IMG_SHAPE),                                                 class_mode='sparse')