Python:神经网络奇异一致输出

2024-09-29 01:31:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建我的第一个神经网络。我试图创建一个“虚拟生物”系统,每个生物的头顶都有两个传感器。 网络得到的输入是两个传感器到最近食物来源的距离。根据输出,我应该决定这个生物是向左走还是向右走,以及以什么角度走。问题是,我总是得到相同的结果(它总是向右或向左)。我的计算如下:

def forward(self, X):
    self.z1 = np.dot(np.insert(X, len(X), 1), self.W1)
    self.a1 = self.sigmoid(self.z1)
    self.z2 = np.dot(np.insert(self.a1, len(self.a1), 1), self.W2)
    results = self.sigmoid(self.z2)
    return results

我通过以下公式计算角度:

    left_d = distance(sensors[0], food_pos)
    right_d = distance(sensors[1], food_pos)
    max_dis = sqrt(WIDTH**2 + HEIGHT ** 2)
    output = self.NN.forward(np.array([float(left_d) / max_dis, float(right_d) / max_dis]))
    if output[0] > output[1]:
        self.angle += (output[0] - 0.5) * np.pi
    else:
        self.angle -= (output[1] - 0.5) * np.pi

我也尝试过随机输入的网络,我发现对于给定的神经网络,输出总是(X,Y),这样X>;Y或X<;Y,就不会在同一个神经网络中的两个神经网络之间随机。你知道吗

以下是一些跑步数据:

X - [ 0.78958477  0.69948212]
Z1 - [ 1.61766664  1.56767388  1.82580234]
A1 - [ 0.99890179  0.99999513  0.96766178]
Z2 - [ 1.45907443  0.92895941]
R - [ 0.9937656   0.80099741]
X - [ 0.14044444  0.60987121]
Z1 - [ 0.97104647  1.00091401  1.23983745]
A1 - [ 0.82547683  0.84196448  0.94573119]
Z2 - [ 1.28368194  0.85941254]
R - [ 0.95906503  0.75745915]

如你所见,R对于这个和~1000000度量是一致的。 这是我的体重初始化:

self.W1 = np.random.rand(self.inputLayerSize + 1, self.hiddenLayerSize)
self.W2 = np.random.rand(self.hiddenLayerSize + 1, self.outputLayerSize)

注意:我使用的是遗传算法而不是反向传播。 以下是GA部分:

def merge_guppies(screen, g1, g2):
    W11, W12 = g1.NN.get_W()
    W21, W22 = g2.NN.get_W()
    W1 = [[0] * len(W11[0])] * len(W11)
    W2 = [[0] * len(W12[0])] * len(W12)
    for k in xrange(len(W11)):
        for j in xrange(len(W11[k])):
            if uniform(0, 1) > 0.9:
                W1[k][j] = uniform(0, 1)
            elif uniform(0, 1) > 0.45:
                W1[k][j] = W11[k][j]
            else:
                W1[k][j] = W21[k][j]
    for k in xrange(len(W12)):
        for j in xrange(len(W12[k])):
            if uniform(0, 1) > 0.9:
                W2[k][j] = uniform(0, 1)
            elif uniform(0, 1) > 0.45:
                W2[k][j] = W12[k][j]
            else:
                W2[k][j] = W22[k][j]
    W1 = np.array(W1)
    W2 = np.array(W2)
    g = Guppy(screen)
    g.NN.set_W(W1, W2)
    return g

我怀疑问题是否在这里,考虑到它发生在我用我的神经网络做的其他测试(只是给它随机输入),但谁知道。。。我已经找了好几天的答案了,我很迷茫。你知道吗

任何帮助都将不胜感激。你知道我哪里出错了吗?你知道吗


Tags: inselfforoutputlennp生物神经网络