本节概述了将你的训练有素的python模型与研究者平台用户界面的整合。
尽管我们一直在寻求扩大我们平台上支持的框架和模型类型,但我们一开始的范围相对较窄。我们目前支持全连接的前馈神经网络。此外,输入维度不能改变。这意味着,研究人员必须使用我们构建的特征。在 神经网络 的架构部分,我们解释了为什么我们做出这个决定。
我们目前支持的一组激活函数应该足以满足大多数模型的需要。然而,如果你想得到其他方面的支持,请在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文件,并遵循以下模式:
{
"activation_function": String,
"output_activation": String,
"n_features": Number,
"n_actions": Number,
"neurons": [Number],
"weights": [[[Number]]],
"biases": [[[Number]]],
}
我们目前支持一个单一的激活函数,适用于所有隐藏层。
在JSON文件中,它由小写字母的激活函数的名称表示。输出激活函数也由其名称表示。
n_features
和 n_actions
分别代表输入(状态空间)和输出(动作空间)的维度。
neurons
代表每个隐藏层中的神经元数量。例如,neurons = [48, 32, 24]
意味着第一层有48个神经元,第二层有32个,第三层有24个。
<aside> 💡 在上面的例子中,24不是输出层的维度。它是最后一个隐藏层(即输出前的那一层)的维度。
</aside>
最后,weights
和 biases
被表示为权重/偏差矩阵的列表。
<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>