2016-04-04 12 views
-3

私はゲームをするためにCNNを実装しようとしています。 私はtheano/lasagneでpythonを使用しています。私はネットワークを構築して、それを訓練する方法を考え出しています。畳み込みニューラルネットワーク:それを訓練する方法? (監督なし)

は、だから今、私は32件の州のバッチを持っており、そのバッチアクションの各状態と、そのアクションの期待報酬ため。

これらの状態でこれらの行動がこれらの報酬につながることを知るためにネットワークを鍛えることができますか?

編集:私の問題を明らかにする。私はこのビットとのトラブルを抱えているhttp://pastebin.com/fgGCabzR

def _train(self): 
    # Prepare Theano variables for inputs and targets 
    input_var = T.tensor4('inputs') 
    target_var = T.ivector('targets') 
    states = T.tensor4('states') 
    print "sampling mini batch..." 
    # sample a mini_batch to train on 
    mini_batch = random.sample(self._observations, self.MINI_BATCH_SIZE) 
    # get the batch variables 
    previous_states = [d[self.OBS_LAST_STATE_INDEX] for d in mini_batch] 
    actions = [d[self.OBS_ACTION_INDEX] for d in mini_batch] 
    rewards = [d[self.OBS_REWARD_INDEX] for d in mini_batch] 
    current_states = np.array([d[self.OBS_CURRENT_STATE_INDEX] for d in mini_batch]) 
    agents_expected_reward = [] 
    # print np.rollaxis(current_states, 3, 1).shape 
    print "compiling current states..." 
    current_states = np.rollaxis(current_states, 3, 1) 
    current_states = theano.compile.sharedvalue.shared(current_states) 

    print "getting network output from current states..." 
    agents_reward_per_action = lasagne.layers.get_output(self._output_layer, current_states) 


    print "rewards adding..." 
    for i in range(len(mini_batch)): 
     if mini_batch[i][self.OBS_TERMINAL_INDEX]: 
      # this was a terminal frame so need so scale future reward... 
      agents_expected_reward.append(rewards[i]) 
     else: 
      agents_expected_reward.append(
       rewards[i] + self.FUTURE_REWARD_DISCOUNT * np.max(agents_reward_per_action[i].eval())) 

    # figure out how to train the model (self._output_layer) with previous_states, 
    # actions and agent_expected_rewards 

私はそうprevious_states、アクションとagent_expected_rewardsを使用してモデルを更新したいhttp://pastebin.com/zY8w98Ng ヘビのインポート:ここ

は私の完全なコードですそれらの行動がそれらの報酬に結びつくことを知ること。

私はそれがこのようなものに見えるかもしれません期待して:私はちょうどネットワークを構築するとき、私はそれらを指定していないので、ギブンスがモデルに影響を与えるだろうか得ることはありません

train_model = theano.function(inputs=[input_var], 
    outputs=self._output_layer, 
    givens={ 
     states: previous_states, 
     rewards: agents_expected_reward 
     expected_rewards: agents_expected_reward) 

を。私はtheanoとlasagneのドキュメンテーションでそれを見つけることができません。

どのようにモデル/ネットワークを更新して「学習する」ことができますか?

まだ明確でない場合は、まだ必要な情報についてコメントしてください。私は数日間これを理解しようとしてきました。

答えて

1

私は最終的に答えを見つけました。私は前に間違った場所を探していた。

network = self._output_layer 
    prediction = lasagne.layers.get_output(network) 
    loss = lasagne.objectives.categorical_crossentropy(prediction, target_var) 
    loss = loss.mean() 

    params = lasagne.layers.get_all_params(network, trainable=True) 
    updates = lasagne.updates.sgd(loss, params, self.LEARN_RATE) 
    givens = { 
     states: current_states, 
     expected: agents_expected_reward, 
     real_rewards: rewards 
    } 
    train_fn = theano.function([input_var, target_var], loss, 
            updates=updates, on_unused_input='warn', 
            givens=givens, 
            allow_input_downcast='True') 
    train_fn(current_states, agents_expected_reward) 
関連する問題