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
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}")
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
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
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