Код: Выделить всё
def load_data(image_dir, img_size=(128, 128), batch_size=32):
"""
Load the dataset using ImageDataGenerator from the directories.
"""
# Create an ImageDataGenerator for rescaling the images and data augmentation
train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)
# Load training data from directories
train_generator = train_datagen.flow_from_directory(
image_dir,
target_size=img_size,
batch_size=batch_size,
class_mode='binary'
)
# Load validation data from directories
validation_generator = train_datagen.flow_from_directory(
image_dir,
target_size=img_size,
batch_size=batch_size,
class_mode='binary'
)
return train_generator, validation_generator
Код: Выделить всё
def build_cnn(input_shape=(128, 128, 3)):
"""
Build a simple CNN model.
"""
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Conv2D(128, (3, 3), activation='relu'),
tf.keras.layers.MaxPooling2D((2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
return model
Код: Выделить всё
train_generator, validation_generator = CNN.load_data(image_dir)
# Build the model
model = CNN.build_cnn()
model.summary()
# Train the model
history = model.fit(
train_generator,
epochs=10,
validation_data=validation_generator
)
Код: Выделить всё
def load_unlabeled_data(to_test_dir, img_size=(128, 128)):
"""
Load the unlabeled images for prediction.
"""
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
to_test_dir,
target_size=img_size,
batch_size=1,
class_mode=None, # No labels for test data
shuffle=False
)
return test_generator
Код: Выделить всё
test_generator = CNN.load_unlabeled_data(to_test_dir)
predictions = model.predict(test_generator)
Код: Выделить всё
TypeError: `generator` yielded an element that did not match the expected structure. The expected structure was (tf.float32,), but the yielded element was [[[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1.
1. 1.] [1. 1. 1.]]
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1.
1. 1.] [1. 1. 1.]]
...
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1.
1. 1.] [1. 1. 1.]]
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1.
1. 1.] [1. 1. 1.]]
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.] ... [1. 1. 1.] [1.
1. 1.] [1. 1. 1.]]]].
Подробнее здесь: https://stackoverflow.com/questions/790 ... xpected-st