def __init__(self, point_reward=None, scope_limit=1, traning_count=2, learning_rate=0.1): ''' 初期化する Args: point_reward: 壁、スタート地点、ゴール地点の報酬 scope_limit: 深層ボルツマンマシンによる探索範囲 (例) 距離的な概念であるため 1なら上下左右斜め1個分隣のマスが範囲になる traning_count: 深層ボルツマンマシンの訓練回数 learning_rate: 深層ボルツマンマシンの学習率 ''' if point_reward is not None: self.__point_reward = point_reward self.__scope_limit = scope_limit neuron_count = self.__decide_neuron_count(scope_limit) self.__dbm = DeepBoltzmannMachine(DBMMultiLayerBuilder(), [neuron_count, 3, 1], SigmoidFunction(), ContrastiveDivergence(), learning_rate) self.__traning_count = traning_count
# 深層ボルツマンマシンの引数の形式に前処理する traning_y = traning_y.reshape((len(traning_y), 1)) data_arr = np.hstack((traning_y, traning_x)) traning_data_matrix = list(data_arr) test_y = test_y.reshape((len(test_y), 1)) data_arr = np.hstack((test_y, test_x)) test_data_matrix = list(data_arr) evaluate_data_list = [] # 深層ボルツマンマシンを構築する(第二引数の各層のニューロンの個数はデモのためアトランダムに規定) dbm = DeepBoltzmannMachine( DBMMultiLayerBuilder(), [len(traning_data_matrix[0]), 8, 6, 4, 2], LogisticFunction(), ContrastiveDivergence(), 0.05 ) dbm.learn(traning_data_matrix, traning_count=1) evaluate_dict = dbm.evaluate_bool(test_data_matrix) evaluate_data_list.append(evaluate_dict) dbm = DeepBoltzmannMachine( DBMMultiLayerBuilder(), [len(traning_data_matrix[0]), 8, 6, 4], LogisticFunction(), ContrastiveDivergence(), 0.05 ) dbm.learn(traning_data_matrix, traning_count=1)