import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.models import Model import os # Datenpfad data_dir = 'orchideen_data' img_height, img_width = 224, 224 batch_size = 8 # Datengenerator train_datagen = ImageDataGenerator( rescale=1./255, validation_split=0.2 ) train_generator = train_datagen.flow_from_directory( data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical', subset='training' ) val_generator = train_datagen.flow_from_directory( data_dir, target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical', subset='validation' ) # Modell base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(img_height, img_width, 3)) x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(64, activation='relu')(x) predictions = Dense(2, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions) # Basis-Modell einfrieren for layer in base_model.layers: layer.trainable = False # Kompilieren und Trainieren model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(train_generator, validation_data=val_generator, epochs=10) # Speichern model.save('orchideen_model.h5')