2017-05-26 8 views
0

Ich versuche neuronale Netze mit zufälligen Gewichten in Keras zu erstellen. Ich verwende die Funktion set_weights() von Modellen, um zufällige Gewichte zuzuweisen. Model.predict() gibt jedoch die gleiche Ausgabe für eine bestimmte Eingabe unabhängig von den Gewichten. Die Ausgabe unterscheidet sich jedes Mal, wenn ich das Programm ausführe, aber es ist dasselbe, während ein Programm läuft. Hier ist der Code:Modell Gewichte nicht ändern 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) 

diesen Fehler zu erstellen, benötigen Sie eine zusätzliche Datei. In dieser Datei ist alles in Ordnung, aber der einzige Aufruf an den Zufallswert ergibt immer den gleichen Wert. Hier ist die file.

+0

wo passen Sie das Modell mit Trainingsdaten an? –

+0

Ich bin und werde nie das neuronale Netz mit irgendwelchen Daten passen. Ich möchte Gewichte nach evolutionärem Algorithmus entscheiden. Ich möchte 100 zufällige neuronale Netze erstellen, die besten auswählen, ihre Gewichte leicht ändern und wiederholen. –

+0

@SagarRohankar Hast du eine Idee, warum passiert das? Können Sie zumindest versuchen, mein Problem neu zu erstellen? –

Antwort

0

Ich weiß nicht, was genau falsch lief, aber ich kam mit einer Arbeit um. Anscheinend gab es ein Problem im Zufallsmodul, aufgrund dessen dieses Verhalten stattfand, wenn das Zufallsmodul aus 2 verschiedenen Dateien aufgerufen wurde. Also habe ich eine Datei anstelle von zwei verwendet und die Ergebnisse erhalten, die ich erwartet hatte.

Verwandte Themen