Ejemplo n.º 1
0
def get_accuracy_iterator(mod, Xdatagen, k=1):
    acc = 0
    npoints = 0
    for i in range(len(Xdatagen)):
        Xfr, yfr = next(Xdatagen)
        ypred = mod.predict(Xfr)
        npoints += len(yfr)
        acc += np.sum(top_k_categorical_accuracy(yfr, ypred, k=k))

        del Xfr
        del yfr
        del ypred
        gc.collect()

    return acc / npoints
Ejemplo n.º 2
0
    batch_size=train_batch_size)

valid_batches = ImageDataGenerator(
    preprocessing_function= 
        tensorflow.keras.applications.xception.preprocess_input).flow_from_directory(
    valid_path,
    target_size=(image_size, image_size),
    batch_size=val_batch_size)


# Train the model
# Define Top2 and Top3 Accuracy
from tensorflow.keras.metrics import categorical_accuracy, top_k_categorical_accuracy

def top_3_accuracy(y_true, y_pred)
    return top_k_categorical_accuracy(y_true, y_pred, k=3)

def top_2_accuracy(y_true, y_pred)
    return top_k_categorical_accuracy(y_true, y_pred, k=2)

# Compile the model
model.compile(Adam(lr=0.01), loss='categorical_crossentropy', metrics=[categorical_accuracy, top_2_accuracy, top_3_accuracy])

# Add weights to make the model more sensitive to melanoma

# Declare the filepath for the saved model
filepath = model_xception_crop.h5

# Declare a checkpoint to save the best version of the model
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1,
                             save_best_only=True, mode='min')
def top_2_accuracy(y_true, y_pred):
    """Calculate Top2 Accuracy
    return: Top2 accuracy
    """
    return top_k_categorical_accuracy(y_true, y_pred, k=2)
def top_3_accuracy(y_true, y_pred):
    """Calculate Top3 Accuracy
    return: top3 accuracy
    """
    return top_k_categorical_accuracy(y_true, y_pred, k=3)
Ejemplo n.º 5
0
 def top3_accuracy(y, predic):
     return metrics.top_k_categorical_accuracy(y, predic, k=3)
Ejemplo n.º 6
0
 def top_2_accuracy(x, y):
     return top_k_categorical_accuracy(x, y, k=2)
Ejemplo n.º 7
0
def top_5_accuracy(x, y): return top_k_categorical_accuracy(x, y, 5)


def create_model_fn(params, is_optimizer_adam=True):
Ejemplo n.º 8
0
def top_3_accuracy(x, y):
    t3 = top_k_categorical_accuracy(x, y, 3)
    return t3
Ejemplo n.º 9
0
def top_5_categorical_error(y_true, y_pred):
    return 1.0 - metrics.top_k_categorical_accuracy(y_true, y_pred, 5)
def top_1_categorical_accuracy(y_true, y_pred):
    s = K.prod(K.shape(y_true)[1:])
    y_true = K.reshape(y_true, [-1, s])
    y_pred = K.reshape(y_pred, [-1, s])
    return metrics.top_k_categorical_accuracy(y_true, y_pred, k=1)
Ejemplo n.º 11
0
def train_model_with_augmentations(model,
                                   datagen,
                                   X_test,
                                   Y_test,
                                   epochs=100,
                                   batch_size=256,
                                   batches_per_epoch=4,
                                   patience=15,
                                   savename="model.h5"):
    """ Train the model until it can not be trained anymore! """

    train_loss = []
    valid_loss = []
    train_top1_acc = []
    valid_top1_acc = []
    train_top5_acc = []
    valid_top5_acc = []
    down_rounds = 0
    best_loss = np.inf
    Y_test_cat = to_categorical(Y_test)

    # Create a data flow
    data_flow = datagen.flow(X_train,
                             Y_train,
                             batch_size=batch_size,
                             shuffle=True)

    for epoch in range(epochs):

        batch_loss = []
        batch_top1 = []
        batch_top5 = []
        for batch in range(batches_per_epoch):
            X_batch, Y_batch = next(data_flow)
            step_loss = model.train_on_batch(X_batch, Y_batch)
            batch_loss.append(step_loss)
            batch_top1.append(
                np.mean(
                    top_k_categorical_accuracy(Y_batch,
                                               model.predict(X_batch),
                                               k=1)))
            batch_top5.append(
                np.mean(
                    top_k_categorical_accuracy(Y_batch,
                                               model.predict(X_batch),
                                               k=5)))

        # End of epoch logging
        Y_pred = model.predict(X_test)
        valid_top1_acc.append(
            np.mean(
                top_k_categorical_accuracy(Y_test_cat,
                                           model.predict(X_test),
                                           k=1)))
        valid_top5_acc.append(
            np.mean(
                top_k_categorical_accuracy(Y_test_cat,
                                           model.predict(X_test),
                                           k=5)))
        train_top1_acc.append(np.mean(batch_top1))
        train_top5_acc.append(np.mean(batch_top5))
        train_loss.append(np.mean(batch_loss))
        valid_loss.append(model.evaluate(X_test, Y_test_cat))

        # Model checkpoint and early stopping.
        if valid_loss[epoch] < best_loss:
            best_loss = valid_loss[epoch]
            down_rounds = 0
            model.save(savename)
            print(
                "[New Best] Epoch {0}, Training Loss: {1:8.4f}, Testing Loss: {2:8.4f}, Training Top-1: {3:8.4f}, Testing Top-1: {4:8.4f}"
                .format(epoch, train_loss[epoch], valid_loss[epoch],
                        train_top1_acc[epoch], valid_top1_acc[epoch]))
        else:
            down_rounds += 1

        if down_rounds >= patience:
            print("Earlying stopping at epoch {}.".format(epoch))
            break

    return train_loss, valid_loss, train_top1_acc, valid_top1_acc, train_top5_acc, valid_top5_acc
def top_3_accuracy(y_test, y_pred):
    return top_k_categorical_accuracy(y_test, y_pred, k=3)
Ejemplo n.º 13
0
def top_n_categorical_accuracy(y_pred, y_label):
    return metrics.top_k_categorical_accuracy(y_pred, y_label, k=TOP_N)
Ejemplo n.º 14
0
def top_3_metrics(y_true, y_pred):
    return top_k_categorical_accuracy(y_true, y_pred, k=3)
Ejemplo n.º 15
0
 def top_5_accuracy(self, y_true, y_pred):
   y_true = y_true[:, :self.num_class]
   y_pred = y_pred[:, :self.num_class]
   return top_k_categorical_accuracy(y_true, y_pred)
Ejemplo n.º 16
0
def top_2_accuracy(y_true, y_pred):
    return top_k_categorical_accuracy(y_true, y_pred, k=2)
Ejemplo n.º 17
0
 def top_5_accuracy(self, y_true, y_pred):
     return top_k_categorical_accuracy(y_true, y_pred, k=5)
 def top_50_accuracy(y_true,y_pred):
 
     return metrics.top_k_categorical_accuracy(y_true,y_pred,k=50)
def top_2_accuracy(in_gt, in_pred):
    return top_k_categorical_accuracy(in_gt, in_pred, k=2)