Bu bölüm, eğitilmiş python modelinizin araştırmacı platformu, kullanıcı arayüzüne entegrasyonunu özetlemektedir.

Hiperparametreler


Platformumuzda desteklediğimiz modellerin çerçevelerini ve türlerini her zaman genişletmeye çalışmamıza rağmen, görece dar bir kapsamla başladık. Şu anda tam bağlantılı ileri beslemeli neural network destekliyoruz. Ek olarak, giriş boyutu değiştirilemez. Bu, araştırmacıların oluşturduğumuz özellikleri kullanması gerektiği anlamına gelir. Neural Networks ’ün mimari bölümünde bu kararı neden verdiğimizi açıklıyoruz.

Desteklediğimiz mevcut etkinleştirme işlevleri, modellerin çoğu için yeterlidir. Ama yine de destek almak isterseniz Discord’dan bize ulaşın.

Girdi → Çıktı Haritası


Modelinizin eğitilmesi için özel bir aracı kodlamak istiyorsanız, select_action adlı yöntemi olan bir sınıf oluşturmalısınız. Bu metot, durumu girdi olarak almalı ve aracının yapacağı eylemin indeksini döndürmelidir.

Önce eylem adlarından dizinlere bir eşleme oluşturmayı daha kolay buluyoruz. Bu şekilde**,**select_action yöntemindeki eylem adlarını kullanabiliriz (çünkü tamsayılarla uğraşırken eylemleri karıştırmak kolaydır) ve ardından adı sondaki eşlemeye besleyebiliriz.

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

Şimdi sınıfı aşağıdaki gibi basit bir politika ile başlatabiliriz:

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'a dışa aktarma


Model dışa aktarımı bir JSON dosyası olmalı ve aşağıdaki şemayı takip etmelidir:

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

Şu anda tüm gizli katmanlara uygulanan tek bir etkinleştirme işlevini destekliyoruz.

JSON dosyasında, küçük harflerle aktivasyon işlevinin adıyla temsil edilir. Çıkış aktivasyon işlevi de adıyla temsil edilir.

n_features ve n_actionssırasıyla girdilerin (durum alanı) ve çıktıların (eylem alanı) boyutsallığını temsil eder.

neurons her gizli katmandaki nöron sayısını temsil eder. Örneğin, neurons = [48, 32, 24] birinci katmanda 48, ikinci katmanda 32 ve üçüncü katmanda 24 nöron olduğu anlamına gelir.

<aside> 💡 Yukarıdaki örnekte 24 çıktı katmanının boyutsallığı değildir. Son gizli katmanın (yani çıktıdan hemen önceki katmanın) boyutsallığıdır.

</aside>

Son olarak, weights ve biases ağırlık/yanlılık matrislerinin bir listesi olarak temsil edilir.

<aside> 💡 Ağırlık matrisleriniz, satırların girdi boyutluluğuna ve sütunların çıktı boyutluluğuna karşılık geldiği standarda uymalıdır. Girdiler olarak sütunlarla ve çıktılar olarak satırlarla çalışmayı tercih ediyorsanız, matrislerinizi JSON'a aktarırken transpoze edin.

</aside>

Aşağıda, bir PyTorch modelini dışa aktarmanın bir örneği verilmiştir:

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> ⬅️ Önceki

</aside>

<aside> ↩️ Geri Dön

</aside>