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')