2017-05-26 167 views
0

我想創建隨機權重在keras中的神經網絡。我正在使用模型的set_weights()函數來分配隨機權重。但是,無論權重如何,model.predict()都會在某個輸入上提供相同的輸出。每次運行程序時輸出都不一樣,但程序運行時卻是一樣的。下面是代碼:模型重量不變Keras

ConnectFourAI.py:

from keras.models import Sequential 
from keras.layers import Dense 
from minimax2 import ConnectFour 
import numpy as np 
from time import sleep 
import itertools 
import random 
import time 

def get_model(): 

    model = Sequential() 
    model.add(Dense(630, input_dim=84, kernel_initializer='uniform', activation='relu')) 
    model.add(Dense(630,kernel_initializer='normal', activation='relu')) 
    model.add(Dense(7, kernel_initializer='normal', activation='relu')) 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    return model 

map = { 
    'x':[1,0], 
    ' ':[0,0], 
    'o':[0,1] 
} 

model = get_model() 

def get_AI_move(grid): 
    global model 
    inp = np.array(list(itertools.chain.from_iterable([map[t] for t in np.array(grid).reshape(42)]))).reshape(1,84) 
    nnout = model.predict(inp) 
    # print(list(nnout[0])) 
    out = np.argmax(nnout) 
    while grid[0][out] != " ": 
     out = np.random.randint(7) 
    print("out = %d"%out) 
    return out 

shapes = [(w.shape) for w in model.get_weights()] 

print(list(model.get_weights()[0][0][0:5])) 
def score_func(x, win): 
     if win == "x": 
      return 10000 
     elif win == " ": 
      return 2000 
     else: 
      return x**2 




if __name__=="__main__": 

    for i in range(100): 
     weights = [np.random.randn(*s) for s in shapes] 
     # print(list(weights[0][0][0:5])) 
     model.set_weights(weights) 
     print(list(model.get_weights()[0][0][0:5])) 
     game = ConnectFour() 
     game.start_new() 
     rounds = game._round 
     win = game._winner 
     score = score_func(rounds, win) 
     print("%dth game scored %.3f"%(i+1,score)) 

     seed = int(time.time()* 10**6)%(2**32)+1 
     np.random.seed(seed) 

要重現此錯誤,你需要一個額外的文件。在這個文件中一切都可以,但唯一的隨機調用總是給出相同的值。這裏是file

+0

你在哪裏擬合訓練數據模型? –

+0

我是永遠不會適應神經網絡的任何數據。我想通過演化算法來決定權重。我想創建100個隨機神經網絡,挑選最好的神經網絡,稍微修改它們的權重並重復。 –

+0

@SagarRohankar你知道爲什麼會發生這種情況嗎?你能儘量重新創建我的問題嗎? –

回答

0

我不知道到底發生了什麼問題,但我想出了一個解決方法。顯然,在隨機模塊中存在一些問題,因爲當從兩個不同的文件調用隨機模塊時,這種行爲發生。所以我用了一個文件而不是兩個文件,並得到了我期望的結果。