[PYTHON] Wie man einen Wettbewerb bei Coda Lab abhält

CodaLab.org ist (auch) eine Plattform für Wettbewerbsveranstaltungen. Sie können auch Ihren eigenen Server mit Open Source auf github veröffentlicht erstellen.

Ein Memorandum mit Know-how für die Durchführung von Wettbewerben bei CodaLab.org.

Klicken Sie hier für die Dokumentation:

Vorlage

Als Referenz Iris Beispiel Challenge. Laden Sie das Bundle von hier herunter (klicken Sie auf der Registerkarte "Learn the Details" auf "DOWNLOAD THE BUNDLE OF THE CHALLENGE") und schreiben Sie die yaml-Datei neu, um eine neue zu erstellen. Selbst wenn Sie es entsprechend schreiben, können Sie es später im Web ändern.

Das Bundle wird per Zip komprimiert und hochgeladen, der Ordner kann jedoch nicht komprimiert werden. Wenn Sie beim Entpacken der Zip-Datei nicht sicherstellen, dass nur die Datei ausgegeben wird, tritt ein Fehler auf.

Referenzmaterial

Wettbewerb um Code einzureichen

Iris-Beispielherausforderung ist ein Code-Einreichungswettbewerb, daher ist es schwer zu sagen, was los ist. Das Folgende ist eine Übersicht.

submission

Metadaten geben den Befehl zur Codeausführung an.

metadata


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

Datei, die zusammen eingereicht werden soll. Alles ist ok.

submission.txt


0
1
0
....

Die auszuführende Datei. Lesen Sie die Datei, die zusammen gesendet werden soll, aus run_dir, führen Sie sie aus und Schreiben Sie die resultierende Datei in output_dir (das später vom Evaluator aufgerufen wird).

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'))

Im obigen Beispiel wird die übermittelte Datei einfach nach output_dir kopiert.

Im Falle eines Code-Einreichungswettbewerbs können das Skript und das trainierte Modell zusammen eingereicht werden. In diesem Fall müssen die Testdaten (privat) in input_dir gelesen werden.

Auswertung

Metadaten geben den Befehl zur Codeausführung an.

metadata


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

Die auszuführende Datei.

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()

Der Betrieb des obigen Beispiels.

scores.txt


score: 0.98

Diese Ergebnisdatei wird auf der Rangliste angezeigt. Das Schlüsselwort "score:" wird in der yaml-Datei (oder in der Web-GUI) angegeben.

Hinweis

Derzeit schlägt der Code, der das neueste Modul verwendet, fehl, da die Version von Python und die Bibliothek des Moduls alt sind (Python ist 2).

Python-Modul 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

Ich weiß nicht, ob es für etwas anderes als Python verwendet werden kann. Da der Server (laut Dokumentation) Windows zu sein scheint, ist es möglich, eine kompilierte Binärdatei hochzuladen. Wenn Sie das neueste Python-Modul verwenden möchten, andere Skripte in Ordnung sind usw., ist es besser, einen eigenen Server zu erstellen.

Wettbewerb, nur das Ergebnis einzureichen

Aktivieren Sie einfach "Nur Ergebnisbewertung" in der Web-GUI.

Da die Übermittlung des Benutzers direkt in der Auswertung input_dir / res gespeichert wird, kann die Auswertung einfach durch Lesen, Lesen des wahren Werts von input_dir / ref, Auswerten und Schreiben in output_dir / score.txt erfolgen.

Hinweis: Auch wenn nur eine Übermittlungsdatei vorhanden ist, kann diese nur übermittelt werden, wenn sie in eine Zip-Datei komprimiert wurde.

Recommended Posts

Wie man einen Wettbewerb bei Coda Lab abhält
Ich las "Wie man ein Hacking Lab macht"
Wie man ein praktisches Seminar mit Jupyter mit Docker abhält
So rufen Sie eine Funktion auf
Wie man ein Terminal hackt
So führen Sie eine Python-Datei an einer Windows 10-Eingabeaufforderung aus
So mischen Sie einen Teil der Python-Liste (at random.shuffle)
Wie erstelle ich eine japanisch-englische Übersetzung?
So setzen Sie einen symbolischen Link
Wie man einen lockeren Bot macht
So erstellen Sie ein Conda-Paket
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
So erstellen Sie eine virtuelle Brücke
Wie erstelle ich eine Docker-Datei?
[Blender] So erstellen Sie ein Blender-Plug-In
So löschen Sie einen Docker-Container
Wie erstelle ich einen Crawler?
So erstellen Sie eine Konfigurationsdatei
So geben Sie eine .py-Datei an, die beim Start in IPython 0.13 geladen werden soll
So erstellen Sie einen Klon aus Github
So teilen und speichern Sie einen DataFrame
So erstellen Sie eine Sphinx-Übersetzungsumgebung
So erstellen Sie einen Git-Klonordner
Qiita (1) Wie schreibe ich einen Codenamen?
So fügen Sie ein Paket mit PyCharm hinzu
[Python] Wie man eine Klasse iterierbar macht
So zeichnen Sie ein Diagramm mit Matplotlib
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Colab] So kopieren Sie einen riesigen Datensatz
[Python] So invertieren Sie eine Zeichenfolge
So installieren Sie ein Paket mithilfe eines Repositorys
[Ubuntu] So führen Sie ein Shell-Skript aus
Wie bekomme ich Stacktrace in Python?
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
So erstellen Sie ein Repository aus Medien
So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
So wählen Sie eine Seaborn-Farbpalette aus
So testen Sie auf einer von Django authentifizierten Seite
Wie erstelle ich eine Pelican Site Map?
So führen Sie Maya Python-Skripte aus
Wie man viele Pipelines zusammenbaut und sofort weglegt
Wie man ein Dialogsystem für Anfänger erstellt
Lesen einer CSV-Datei mit Python 2/3
So tarnen Sie eine ZIP-Datei als PNG-Datei
So erstellen Sie große Dateien mit hoher Geschwindigkeit
So speichern Sie alle Instagram-Fotos auf einmal
So senden Sie eine Nachricht mit Curl an LINE
So codieren Sie eine Drohne mithilfe der Bilderkennung
So löschen Sie einen Taple in einer Liste (Python)
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Einbetten von Variablen in Python-Strings
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie eine JSON-Datei in Python
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.