RED HAT
RED HAT
DIIDevHeads IoT Integration Server
Created by Enthernet Code on 8/13/2024 in #code-review
How do I fix a tensor dimension mismatch in TinyML disease detection?
Hello @Enthernet Code The error you’re encountering is due to a mismatch between the input image dimensions expected by your model and the actual dimensions of the images being fed into it. Your model expects images with a shape of (64, 64, 1) (grayscale), but the images you’re providing have a shape of (128, 128, 3) (colored). To resolve this, you have two options: 1. Preprocess your images to resize them to (64, 64) and convert them to grayscale before feeding them into the model:
from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rescale=1./255)
train_generator = datagen.flow_from_directory(
'path/to/dataset',
target_size=(64, 64), # Resize images to 64x64
color_mode='grayscale', # Convert images to grayscale
class_mode='categorical'
)

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(rescale=1./255)
train_generator = datagen.flow_from_directory(
'path/to/dataset',
target_size=(64, 64), # Resize images to 64x64
color_mode='grayscale', # Convert images to grayscale
class_mode='categorical'
)

2. If you prefer to use the images in their original size and color, you’ll need to adjust the model’s input shape accordingly:
model = models.Sequential([
layers.Conv2D(16, (3, 3), activation='relu', input_shape=(128, 128, 3)),
layers.MaxPooling2D((2, 2), name="pool_1"),
layers.Conv2D(32, (3, 3), activation='relu', name="conv_2"),
layers.MaxPooling2D((2, 2), name="pool_2"),
layers.Flatten(name="flatten"),
layers.Dense(64, activation='relu', name="dense_1"),
layers.Dense(3, activation='softmax', name="output_layer")
])

model = models.Sequential([
layers.Conv2D(16, (3, 3), activation='relu', input_shape=(128, 128, 3)),
layers.MaxPooling2D((2, 2), name="pool_1"),
layers.Conv2D(32, (3, 3), activation='relu', name="conv_2"),
layers.MaxPooling2D((2, 2), name="pool_2"),
layers.Flatten(name="flatten"),
layers.Dense(64, activation='relu', name="dense_1"),
layers.Dense(3, activation='softmax', name="output_layer")
])

3 replies