このセクションでは、学習した Python モデルのリサーチャー・プラットフォーム UI への統合の概要を説明します。

ハイパーパラメータ


私たちはプラットフォームでサポートするフレームワークとモデルの種類を常に拡大しようとしていますが、比較的狭い範囲から始めました。現在サポートしているのは、完全連結型フィードフォワードニューラルネットワークです。また、入力次元を変更することはできません。つまり、リサーチャーは私たちが構築した機能を使用しなければならないことを意味します。ニューラルネットワーク のアーキテクチャの箇所で、このような決定をした理由が説明されています。

現在サポートしている活性化関数のセットは、大半のモデルで十分だと思われます。しかし、もし他のサポートが必要な場合は、Discordで私たちに連絡してください。

入力 → 出力のマッピング


もしモデルが学習するためのカスタムエージェントを作成したい場合、select_action という名前のメソッドを持つクラスを作成する必要があります。このメソッドは状態を入力として受け取り、エージェントが取るアクションのインデックスを返さなければなりません

まず、アクション名からインデックスへのマッピングを作成するのが簡単だと思います。この方法では、select_action メソッドでアクション名を使用し(整数を扱う場合、アクションを混同しやすいので)、最後にマッピングに名前を入力します。

actions_list = [
    "Run Left",
    "Run Right",
    "Single Punch",
    "Double Punch",
    "Defend",
    "Jump",
    "Jump Left",
    "Jump Right",
    "Jump Punch",
    "Low Kick"
]

action_to_idx_mapping = {}
for i in range(len(actions_list)):
    action_to_idx_mapping[actions_list[i]] = i

これで、次のように単純なポリシーでクラスを初期化できます。

class CustomAgent():
  def __init__(self):
      self.type = "rules-based-agent"

  def select_action(self, state):
    (
        relative_distance,
        you_facing_opponent,
        opponent_facing_you,
        your_health,
        opponent_health,
        relative_strength,
        relative_speed,
        relative_defence,
        relative_accuracy
    ) = state[0]
		
		action = "Single Punch"
		if abs(relative_distance < 0.1):
				if (relative_distance < 0):
						action = "Run Right"
				else:
						action = "Run Left"

		return action_to_idx_mapping[action]

JSONへのエクスポート


モデルのエクスポートはJSONファイルであり、以下のスキーマに従う必要があります。

{
	"activation_function": String,
	"output_activation": String,
	"n_features": Number,
	"n_actions": Number,
	"neurons": [Number],
	"weights": [[[Number]]],
	"biases": [[[Number]]],
}

現在、すべての隠れ層に適用される1つの活性化関数をサポートしています。

JSONファイルでは、活性化関数の名前を小文字で表記しています。また、出力活性化関数もその名前で表されます。

n_featuresn_actions はそれぞれ入力(状態空間)、出力(アクション空間)の次元を表します。

neurons は、各隠れ層のニューロン数を表します。例えば、neurons = [48, 32, 24] は、第1層に48ニューロン、第2層に32ニューロン、第3層に24ニューロンが存在することを意味します。

<aside> 💡 上記の例では、24は出力層の次元数ではありません。最後の隠れ層(すなわち、出力の直前の層)の次元です。

</aside>

最後に、weightsbiasesは、重み/バイアス行列のリストとして表されます。

<aside> 💡 重み行列は、行が入力の次元に、列が出力の次元に対応する標準に従う必要があります。もし、列を入力、行を出力として扱いたい場合は、JSONにエクスポートする際に行列を転置してください。

</aside>

以下は、PyTorchのモデルをエクスポートする例です。

def save_pytorch_model(model):
    weights_data = []
    bias_data = []
    for layer in model.layers:
        current_parameters = [model.tensor_to_array(params) for params in layer.parameters()]
        weights_data.append([current_parameters[0].tolist()])
        bias_data.append([current_parameters[1].tolist()]) 

    model_data = {
        "activation_function": model.activation_function.__name__,
        "output_activation": model.output_activation.__name__,
        "n_features": model.n_features,
        "n_actions": model.n_actions,
        "neurons": list(model.neurons),
        "weights": weights_data,
        "biases": bias_data
    }
    
    json_string = json.dumps(model_data)
    with open('saved_model/model_pytorch.json', 'w') as outfile:
        outfile.write(json_string)

<aside> ⬅️ 戻る

</aside>

<aside> ↩️ トップへ戻る

</aside>