2

私が現在取り組んでいるプロジェクトでは、一連の実験の設定を定義する宣言的な方法が必要です。

これまでのところ、このような解決策を見つけました。JSON を使用してデフォルト設定を公開するデータ構造がいくつかあります。

{
    "trustRatio": 0.7,
    "filter.coefA": 0,
    "filter.coefB": 1,
    "filter.coefC": 2,
    "filter.coefD": 3
}

次に、実験を設定するには、実験の実行中に変更するフィールドを指定する必要があります。今、私はこのようにしています:

{
    "path": "filter.coefA",
    "values": [0, 1, 2, 3, 4, 5]
}

また

{
    "path": "filter.coefA",
    "min": 0
    "max": 5,
    "step": 1
}

次に、デフォルト設定と「グラデーション」設定の両方を辞書としてインスタンス化し、「パス」キーを使用して、デフォルト設定をボイラープレートとして使用し、値を実験マイルストーンとして使用して一連の実験設定を作成します。

このソリューションは、私が使用しているPythonまたはCSharpを使用して簡単に実装できますが、デフォルトと「グラデーション」設定を別々に保存するため、最適なものではありません. もう1つは、次のような階層構造を使用できないことです。

{
    "trustRatio": 0.7,
    "filter":
    {
        "coefA": 0,
        "coefB": 1,
        "coefC": 2,
        "coefD": 3
    }
}

これは、このソリューションを Python および CSharp で実装するときに辞書が課す制約のためです。

次のようにスポットで「勾配」を宣言することにより、実験設定の配列を取得できるPythonまたはCSharp(または少なくともFSharpのような他のCLR互換言語)ツールがあるかどうかは誰にもわかりますか?

{
    "trustRatio": 0.7,
    "filter":
    {
        "coefA": [0, 1, 2, 3, 4, 5],
        "coefB": 1,
        "coefC": 2,
        "coefD": 3
    }
}

?

4

2 に答える 2

0

Webで検索した後、この問題に対する独自のソリューションを実装しました。それはまさに私がやりたかったことをします。その説明はここにあります。CSharp のソース コードといくつかの例をここに示します。

于 2012-05-23T00:29:21.013 に答える
0

Python には、ディクショナリ構造を複製するための組み込みメソッドがいくつかあります: dict.copy() と copy.deepcopy () だからあなたが持つことができます: -

>>> gradient = {
...    "trustRatio": 0.7,
...    "filter":
...    {
...        "coefA": [0, 1, 2, 3, 4, 5],
...        "coefB": 1,
...        "coefC": 2,
...        "coefD": 3
...    }
... }
>>>
>>> gradient2 = gradient.copy()
>>> print gradient2
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> import copy
>>> print copy.deepcopy( gradient )
{'filter': {'coefD': 3, 'coefA': [0, 1, 2, 3, 4, 5], 'coefB': 1, 'coefC': 2}, 'trustRatio': 0.7}
>>> gradient.copy() == copy.deepcopy( gradient ) == gradient
True
于 2012-05-13T18:52:32.013 に答える