Пример #1
0
 def test_expand_ratio(self):
     model = models.create_efficientnet("efficientnet-b0", expand_ratio=2)
     for i, block in enumerate(model.blocks):
         if i == 0:
             continue
         for layer in block:
             conv = layer.conv_pw
             assert conv.out_channels == conv.in_channels * 2
Пример #2
0
def train():
    print("[INFO] Loading and cropping all raw training receipt images...")

    images, quality = dataset.load_data(config.TRAIN_IMAGE_FOLDER_PATH, config.TRAIN_CSV_PATH, config.INPUT_SIZE)

    split = train_test_split(quality, images, test_size=0.25, random_state=42)
    (trainY, validY, trainX, validX) = split

    mc = ModelCheckpoint(config.OUTPUT_MODEL_PATH, monitor='val_loss', mode='min', verbose=1, save_best_only=True)
    model = models.create_efficientnet(config.INPUT_SIZE, config.INPUT_SIZE, 3, config.MODEL_BASE, config.FIRST_LAYERS_TO_FREEZE)
    opt = Adam(lr=config.LEARNING_RATE, decay=config.LEARNING_RATE / config.EPOCHS)
    model.compile(loss="mean_squared_error", optimizer=opt)
    
    # Print the training config
    print(f"[INFO] Training config: \n\
        - MODEL_BASE: {config.MODEL_BASE}\n\
        - INPUT_SIZE: {str(config.INPUT_SIZE)}x{str(config.INPUT_SIZE)}\n\
        - EPOCHS: {str(config.EPOCHS)}\n\
        - BATCH_SIZE: {str(config.BATCH_SIZE)}\n\
        - LEARNING_RATE: {str(config.LEARNING_RATE)}\n")

    # Train the model
    print("[INFO] Training model...")
    H = model.fit(x=trainX, y=trainY, 
        validation_data=(validX, validY),
        epochs=config.EPOCHS, batch_size=config.BATCH_SIZE, callbacks=[mc])

    # Save Figure
    print(f"[INFO] Saving the training firgure...")
    save_trainging_plot(H, config.OUTPUT_TRAINING_FIG_PATH)

    # Load saved model
    model = load_model(config.OUTPUT_MODEL_PATH)

    # make predictions on the testing data
    print("[INFO] Predicting receipt quality on validation data...")
    preds = model.predict(validX)

    rmse = math.sqrt(metrics.mean_squared_error(validY, preds))

    print(f"[INFO] RMSE on validation data: {rmse}")
Пример #3
0
 def test_group_dim(self):
     model = models.create_efficientnet("efficientnet-b0", group_dim=2)
     for block in model._blocks:
         conv = block._depthwise_conv
         assert conv.groups * 2 == conv.in_channels
Пример #4
0
 def test_expand_ratio(self):
     model = models.create_efficientnet("efficientnet-b0", expand_ratio=2)
     for idx, block in enumerate(model._blocks):
         if idx > 0:
             conv = block._expand_conv
             assert conv.out_channels == conv.in_channels * 2
Пример #5
0
 def test_group_dim(self):
     model = models.create_efficientnet("efficientnet-b0", group_dim=2)
     for block in model.blocks:
         for layer in block:
             conv = layer.conv_dw
             assert conv.groups * 2 == conv.in_channels