Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 简单神经网络调试_Python_Neural Network - Fatal编程技术网

Python 简单神经网络调试

Python 简单神经网络调试,python,neural-network,Python,Neural Network,我正试图创建一个基于的python神经网络实现,但我一直在调试,无法找出我把什么搞砸了。目前,在计算隐藏层的增量时出现了一个问题,我假设矩阵操作存在一些问题,这些问题会影响后续步骤。有人能帮忙调试吗 import numpy as np class NeuralNetwork: def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def sigmoid_d(self, x): return x

我正试图创建一个基于的python神经网络实现,但我一直在调试,无法找出我把什么搞砸了。目前,在计算隐藏层的增量时出现了一个问题,我假设矩阵操作存在一些问题,这些问题会影响后续步骤。有人能帮忙调试吗

import numpy as np


class NeuralNetwork:

    def sigmoid(self, x):
        return 1 / (1 + np.exp(-x))

    def sigmoid_d(self, x):
        return x * (1 - x)

    def __init__(self, input_nodes, hidden_nodes, output_nodes):
        # Save size properties
        self.input_nodes_count = input_nodes
        self.hidden_nodes_count = hidden_nodes
        self.output_nodes_count = output_nodes

        # Generate random weights
        self.weights_ih = np.random.random((self.hidden_nodes_count, self.input_nodes_count))
        self.weights_ho = np.random.random((self.output_nodes_count, self.hidden_nodes_count))

        # Generate weights for biases
        self.bias_h = np.random.randn()
        self.bias_o = np.random.randn()

        # Set learning rate
        self.learningRate = 0.1

    def calc_hidden(self, inputs):
        # Prepare hidden values
        hidden_without_bias = np.dot(self.weights_ih, inputs)

        # Add bias for hidden values
        hidden_not_activated = np.add(hidden_without_bias, self.bias_h)

        # Execute hidden activation
        hidden = list(map(lambda x: self.sigmoid(x), hidden_not_activated))

        return hidden

    def calc_output(self, inputs):
        # Prepare output values
        output_without_bias = np.dot(self.weights_ho, inputs)

        # Add bias for output values
        output_not_activated = np.add(output_without_bias, self.bias_o)

        # Execute output activation
        outputs = list(map(lambda x: self.sigmoid(x), output_not_activated))

        return outputs

    def predict(self, inputs):
        # Calc hidden values
        hidden = self.calc_hidden(inputs)

        # Calc output values
        outputs = self.calc_output(hidden)

        return outputs

    def train(self, inputs, targets):
        # Calc hidden values
        hidden = self.calc_hidden(inputs)

        # Calc output values
        outputs = self.calc_output(hidden)

        # Calc output errors
        output_errors = np.subtract(outputs, targets)

        # Calc the output gradient
        gradients = list(map(lambda x: self.sigmoid_d(x), outputs))
        gradients = np.multiply(gradients, output_errors)
        gradients = np.multiply(gradients, self.learningRate)

        # Calc deltas
        hidden_t = np.transpose(hidden)
        weights_ho_deltas = np.dot(gradients, hidden_t)

        # Adjust output weights by deltas
        for i in range(len(self.weights_ho)):
            for j in range(len(self.weights_ho[i])):
                self.weights_ho[i][j] += weights_ho_deltas[i][j]
        self.bias_o += gradients

        # Calc the hidden layer errors
        weights_ho_t = np.transpose(self.weights_ho)
        hidden_errors = np.dot(weights_ho_t, output_errors)
        # Calc the hidden gradient
        hidden_gradients = list(map(lambda x: self.sigmoid_d(x), hidden))
        hidden_gradients = np.multiply(hidden_gradients, hidden_errors)
        hidden_gradients = np.multiply(hidden_gradients, self.learningRate)

        # Calc hidden deltas
        inputs_t = np.transpose(inputs)
        weights_ih_deltas = np.dot(hidden_gradients, inputs_t)

        # Adjust hidden weights by deltas
        for i in range(len(self.weights_ih)):
            for j in range(len(self.weights_ih)):
                self.weights_ih[i][j] += weights_ih_deltas[i][j]
        self.bias_h += hidden_gradients


if __name__ == '__main__':
    neuralNetwork = NeuralNetwork(2, 2, 1)

    training_data = [[0, 0], [0, 1], [1, 0], [1, 1]]
    training_output = [[0], [1], [1], [0]]

    for i in range(1):
        index = np.random.randint(0, len(training_output))
        neuralNetwork.train(training_data[index], training_output[index])

    print(neuralNetwork.predict([1, 1]))

但是你被困在哪一部分呢?错误是什么,预期输出是什么,等等?实际上很难确定哪部分无效。我认为这是一个计算三角洲和调整权重的问题。关于预期输出,运行更多次后的训练数据集应该学习XOR函数,因此我希望[1,1]的预测值尽可能接近0。我知道我没有像我应该的那样解决这个问题,但是现在我有点迷失在这个主题中,因为我花了很多时间试图调试它。你应该发布你得到的完整错误跟踪,还有你自己尝试和调试的步骤。目前在生成隐藏层和梯度的点积时有一个错误(这个错误很明显),但我认为主要的问题是算法,我相信对于熟悉这个主题的人来说,这个错误可能很严重。我试图找出我的实现和实际算法之间的差异,但失败了。对不起,我说得不够精确,但你到底在做什么?错误是什么,预期输出是什么,等等?实际上很难确定哪部分无效。我认为这是一个计算三角洲和调整权重的问题。关于预期输出,运行更多次后的训练数据集应该学习XOR函数,因此我希望[1,1]的预测值尽可能接近0。我知道我没有像我应该的那样解决这个问题,但是现在我有点迷失在这个主题中,因为我花了很多时间试图调试它。你应该发布你得到的完整错误跟踪,还有你自己尝试和调试的步骤。目前在生成隐藏层和梯度的点积时有一个错误(这个错误很明显),但我认为主要的问题是算法,我相信对于熟悉这个主题的人来说,这个错误可能很严重。我试图找出我的实现和实际算法之间的差异,但失败了。对不起,不够精确