evostra
1.0.0
進化策略(ES)是一種基於適應和進化想法的最佳化技術。您可以在 https://blog.openai.com/evolution-strategies/ 了解更多信息
它相容於 python2 和 python3。
從源安裝:
$ python setup.py install
使用 pip 從 git 儲存庫安裝最新版本:
$ pip install git+https://github.com/alirezamika/evostra.git
從 PyPI 安裝:
$ pip install evostra
(python3可能需要使用python3或pip3)
人工智慧代理使用 evostra 學習玩《flappybird》
人工智慧代理商使用 evostra 學習走路
EvolutionStrategy模組的輸入權重是一個陣列列表(神經網路的每一層都有一個任意形狀的陣列),因此我們可以使用任何框架來建立模型並將權重傳遞給ES。
例如,我們可以使用 Keras 建立模型並將其權重傳遞給 ES,但這裡我們使用 Evostra 的內建模型 FeedForwardNetwork,它對於我們的用例來說要快得多:
import numpy as np
from evostra import EvolutionStrategy
from evostra . models import FeedForwardNetwork
# A feed forward neural network with input size of 5, two hidden layers of size 4 and output of size 3
model = FeedForwardNetwork ( layer_sizes = [ 5 , 4 , 4 , 3 ])
現在我們定義 get_reward 函數:
solution = np . array ([ 0.1 , - 0.4 , 0.5 ])
inp = np . asarray ([ 1 , 2 , 3 , 4 , 5 ])
def get_reward ( weights ):
global solution , model , inp
model . set_weights ( weights )
prediction = model . predict ( inp )
# here our best reward is zero
reward = - np . sum ( np . square ( solution - prediction ))
return reward
現在我們可以建立 EvolutionStrategy 物件並運行它進行一些迭代:
# if your task is computationally expensive, you can use num_threads > 1 to use multiple processes;
# if you set num_threads=-1, it will use number of cores available on the machine; Here we use 1 process as the
# task is not computationally expensive and using more processes would decrease the performance due to the IPC overhead.
es = EvolutionStrategy ( model . get_weights (), get_reward , population_size = 20 , sigma = 0.1 , learning_rate = 0.03 , decay = 0.995 , num_threads = 1 )
es . run ( 1000 , print_step = 100 )
這是輸出:
iter 100。 iter 200。 iter 300。 iter 400。 iter 500。 iter 600。 iter 700。 iter 800。 iter 900。 iter 1000。
現在我們有了優化的權重,我們可以更新我們的模型:
optimized_weights = es . get_weights ()
model . set_weights ( optimized_weights )