一直試圖實現一個Q深度學習算法,雖然它在100 000次遊戲後使用不起作用,並且使用1000次迭代訓練每個步驟(儘管我已經嘗試了較低的數字)它仍然沒有學習。網絡和遊戲是鏈接的圖像中,http://imgur.com/a/hATfB這裏是在每個訓練步驟發生的情況:爲backpropQ深度學習算法不起作用
double maxQval;
double[] inputvec;
int MaxQ = GetRandDir(state, out maxQval, out inputvec);//input vec is board
double[] QtarVec = new double[] { 0, 0, 0, 0 };
double r = GetR((int)state[0], (int)state[1]); // GetR is reward
QtarVec[MaxQ] = Qtar(r, maxQval); // backprop vector of 0's except Qtar replaces a value
associator.Train(50, new double[][] { inputvec }, new double[][] { QtarVec });
訓練數據對是(入端i在圖像鏈接,QTarget = R +伽馬* MAXQ),MAXQ是最大網絡輸出層激活或隨機一個(ε貪婪)。 r是每次移動獲得的獎勵,-10爲障礙,10爲目標。 (althogh我剛剛10個目標和0的一切嘗試。這裏是訓練碼。
public void Train(int nTrails)
{
double[] state = new double[] { 1, 1 }; // inital position
int its = 0;
for (int i = 0; i < nTrails; i++)
{
while (((state[0] < 4) && (state[1] < 4))&&((state[0] * 100 >0) && (state[1] * 100 >0)) && (state[0] != 3 && state[1] != 3))//while on board and not at goal postion
{
double temp = r.NextDouble();
int next = -1;
lines.Add(new Vector2((float)(state[0] * 100), (float)(state[1] * 100)));
if (temp < epsilon)
{
next = TrainRandIt(state); // move random direction, backprop
}
else
{
next = TrainMaxIt(state); // move in max activation direction, backprop
}
if (next == 0) .//updating postion
{
state[0]++;
}
else if (next == 1)
{
state[0]--;
}
else if (next == 2)
{
state[1]++;
}
else if (next == 3)
{
state[1]--;
}
}
}
state[0] = 1;
state[1] = 1; // resetting game
}
任何幫助表示讚賞。
縮進使讀取代碼變得容易。 –
謝謝你 –