[PYTHON] Comment organiser un concours au Coda Lab

CodaLab.org est une plateforme de concours (également). Vous pouvez également créer votre propre serveur avec Open source publié sur github.

Un mémorandum de savoir-faire pour la tenue de concours sur CodaLab.org.

Cliquez ici pour la documentation:

modèle

Pour référence, Iris example challenge. Téléchargez le bundle à partir d'ici (cliquez sur "TÉLÉCHARGER LE BUNDLE OF THE CHALLENGE" dans l'onglet "Learn the Details") et réécrivez le fichier yaml pour en créer un nouveau. Même si vous l'écrivez correctement, vous pouvez le modifier ultérieurement sur le Web.

Le bundle est compressé et téléchargé, mais il n'est pas possible de compresser le dossier. Si vous ne vous assurez pas que seul le fichier sort lorsque vous décompressez le zip, une erreur se produira.

Matériel de référence

Concours pour soumettre le code

Iris example challenge est un concours de soumission de code, il est donc difficile de dire ce qui se passe. Voici un aperçu.

submission

metadata spécifie la commande d'exécution du code.

metadata


command: python $program/cat.py $input $output
description: Compute scores for the competition

Dossier à soumettre ensemble. Tout est OK.

submission.txt


0
1
0
....

Le fichier à exécuter. Lisez le fichier à soumettre ensemble à partir de run_dir, exécutez-le et Ecrivez le fichier résultant dans output_dir (qui sera appelé ultérieurement par l'évaluateur)

cat.py


#!/usr/bin/env python

import os
from sys import argv
from shutil import copyfile

if __name__=="__main__":

    if len(argv)==1:
        input_dir  = os.path.join('..', 'input')
        output_dir = os.path.join('..', 'output')
    else:
        input_dir  = argv[1]
        output_dir = argv[2]

    run_dir = os.path.abspath(".")

    copyfile(os.path.join(run_dir, 'program', 'submission.txt'),
             os.path.join(output_dir, 'submission.txt'))

Dans l'exemple ci-dessus, le fichier soumis est simplement copié dans output_dir.

Dans le cas d'un concours de soumission de code, le script et le modèle entraîné peuvent être soumis ensemble. Dans ce cas, il est nécessaire de lire les données de test (privées) dans input_dir.

Évaluation

metadata spécifie la commande d'exécution du code.

metadata


command: python $program/evaluate.py $input $output
description: Compute scores for the competition

Le fichier à exécuter.

evaluate.py


#!/usr/bin/env python

import os
from sys import argv
import numpy as np

if __name__=="__main__":

    if len(argv)==1:
        input_dir  = os.path.join('..', 'input')
        output_dir = os.path.join('..', 'output')
    else:
        input_dir  = argv[1]
        output_dir = argv[2]

    y_submit_file = os.path.join(input_dir, 'res', 'submission.txt')
    y_ref_file = os.path.join(input_dir, 'ref', 'test_labels.csv')

    load_y_ref = np.loadtxt(y_ref_file)
    load_y_submission = np.loadtxt(y_submit_file)

    score = np.abs(load_y_ref - load_y_submission).sum() / float(load_y_ref.size)
    print("score: %.2f\n" % score)

    score_file = open(os.path.join(output_dir, 'scores.txt'), 'w')
    score_file.write("score: %.2f\n" % score)

    score_file.close()

Le fonctionnement de l'exemple ci-dessus.

scores.txt


score: 0.98

Ce fichier de résultat est affiché sur le tableau des leaders. Le mot-clé "score:" est spécifié dans le fichier yaml (ou dans l'interface graphique Web).

Mise en garde

Actuellement, le code qui utilise le dernier module échoue car la version de python et la bibliothèque du module sont anciennes (python vaut 2).

module python 2017/02/14


Python version: 2.7.10 |Anaconda 2.4.0 (64-bit)| (default, Oct 19 2015, 18:04:42) 
numpy==1.10.1
scikit-learn==0.16.1
scipy==0.16.0

Je ne sais pas s'il peut être utilisé pour autre chose que python. Puisque le serveur semble être Windows (selon la documentation), il est possible de télécharger un fichier binaire compilé. Si vous souhaitez utiliser le dernier module python, d'autres scripts sont OK, etc., il est préférable de créer votre propre serveur.

Concours pour ne soumettre que le résultat

Cochez simplement "Résultats uniquement" dans l'interface graphique Web.

Puisque la soumission de l'utilisateur est enregistrée directement dans l'évaluation input_dir / res, l'évaluation peut être effectuée simplement en la lisant, en lisant la vraie valeur de input_dir / ref, en l'évaluant et en l'écrivant dans output_dir / scores.txt.

Remarque: même s'il n'y a qu'un seul fichier de soumission, il ne peut être soumis que s'il est compressé au zip dans un fichier zip.

Recommended Posts

Comment organiser un concours au Coda Lab
J'ai lu "Comment créer un laboratoire de piratage"
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Comment appeler une fonction
Comment pirater un terminal
Comment exécuter un fichier Python à une invite de commande Windows 10
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Comment faire une traduction japonais-anglais
Comment mettre un lien symbolique
Comment créer un bot slack
Comment créer un package Conda
Comment créer un robot - Avancé
Comment créer une fonction récursive
Comment créer un pont virtuel
Comment créer un Dockerfile (basique)
[Blender] Comment créer un plug-in Blender
Comment supprimer un conteneur Docker
Comment créer un robot - Basic
Comment créer un fichier de configuration
Comment spécifier un fichier .py à charger au démarrage dans IPython 0.13
Comment créer un clone depuis Github
Comment diviser et enregistrer un DataFrame
Comment créer un environnement de traduction sphinx
Comment créer un dossier git clone
Qiita (1) Comment écrire un nom de code
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
Comment dessiner un graphique avec Matplotlib
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
[Colab] Comment copier un vaste ensemble de données
[Python] Comment inverser une chaîne de caractères
Comment installer un package à l'aide d'un référentiel
[Ubuntu] Comment exécuter un script shell
Comment obtenir stacktrace en python
Comment mettre un numéro de ligne au début d'un fichier CSV
Comment créer un référentiel à partir d'un média
Comment créer un indicateur personnalisé Backtrader
Comment choisir une palette de couleurs Seaborn
Comment tester sur une page authentifiée par Django
Comment créer un plan de site Pelican
Comment exécuter des scripts Maya Python
Comment assembler de nombreux pipelines et les ranger en même temps
Comment créer un système de dialogue dédié aux débutants
Comment lire un fichier CSV avec Python 2/3
Comment déguiser un fichier ZIP en fichier PNG
Comment créer des fichiers volumineux à haute vitesse
Comment enregistrer toutes les photos Instagram à la fois
Comment envoyer un message à LINE avec curl
Comment coder un drone en utilisant la reconnaissance d'image
Comment effacer un taple dans une liste (Python)
Comment dessiner un graphique à 2 axes avec pyplot
Comment incorporer des variables dans des chaînes python
Comment créer un objet fonction à partir d'une chaîne
Comment dessiner un graphique 3D avant l'optimisation
Comment développer une application de panier avec Django
Comment créer un fichier JSON en Python
Comment créer un dictionnaire avec une structure hiérarchique.