首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型权重不改变Keras

模型权重不改变Keras
EN

Stack Overflow用户
提问于 2017-05-26 05:56:34
回答 1查看 1.1K关注 0票数 0

我试图在角角中建立具有随机权值的神经网络。我正在使用set_weights()函数的模型,来分配随机权重。但是,无论权重如何,model.predict()在特定输入上都会提供相同的输出。每次我运行程序时,输出都会不同,但在程序运行时是一样的。以下是代码:

ConnectFourAI.py:

代码语言:javascript
复制
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)

要重新创建此错误,您需要一个额外的文件。这个文件中的所有内容都是正常的,但是唯一的随机调用总是给出相同的值。这是文件

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 06:04:29

我不知道到底出了什么问题,但我想出了一个办法。显然,在随机模块中存在一些问题,当从两个不同的文件中调用随机模块时,就会发生这种行为。所以我用了一个文件而不是两个文件,得到了我期望的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44194564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档