Beim Testen des Tflite -Modells auf meinem Notebook erzeugt. Wenn ich jedoch mein Flutter APK erstelle und das Modell dort ausführe, gibt es immer die gleiche Klasse aus, unabhängig vom Eingabebild. Mein Vorgängermodell mit MobileNetv2 hat in Flutter korrekt funktioniert. Hier ist der Trainingscode und der Conversion -Code, den ich verwendet habe. Ich vermute, dass dies möglicherweise mit Unterschieden bei der Vorverarbeitung oder Modellumwandlung zwischen Mobilenetv2 und mobilenetv3-large zusammenhängt. Hat jemand auf dieses Problem gestoßen oder hat Vorschläge zu dem, was die konstante Ausgabe in der Flutterumgebung verursacht?
Code: Select all
from tensorflow.keras.regularizers import l2
from tensorflow.keras.layers import Dropout
from tensorflow.keras.applications import MobileNetV3Large
l2_strength = 0.01
base_model = MobileNetV3Large(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
base_model.trainable = False # Freeze the base model
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='swish', kernel_regularizer=l2(l2_strength))(x)
x = Dropout(0.5)(x) # Add dropout
predictions = Dense(46, activation='softmax', kernel_regularizer=l2(l2_strength))(x)
model = Model(inputs=base_model.input, outputs=predictions)
model.compile(optimizer=Adam(learning_rate=0.0005), loss='categorical_crossentropy', metrics=['accuracy'])
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping
from tensorflow.keras.regularizers import l2
from tensorflow.keras.layers import Dense, Dropout
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=3, min_lr=1e-7)
early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
history = model.fit(
train_generator,
steps_per_epoch=len(train_generator),
validation_data=validation_generator,
validation_steps=len(validation_generator),
epochs=50,
callbacks=[reduce_lr, early_stopping]
)
# Accuracy
test_loss, test_accuracy = model.evaluate(test_generator)
print(f'Test Accuracy: {test_accuracy * 100:.2f}%')
# Model saving
model.save('classifier_V3.keras')
Code: Select all
import tensorflow as tf
from tensorflow.keras.models import load_model
model_path = "classifier_V3.keras"
tflite_model_path = "classifier_V3.tflite"
model = load_model(model_path)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open(tflite_model_path, 'wb') as f:
f.write(tflite_model)
print(f"TensorFlow Lite model saved to {tflite_model_path}")