欢迎访问宙启技术站
智能推送

Python编程:从头开始创建自己的神经网络

发布时间:2023-12-27 22:28:36

Python是一种广泛使用的编程语言,非常适合用来构建神经网络。在本文中,我们将从头开始创建一个简单的神经网络,并通过一个使用例子来说明它的使用。

首先,我们需要导入一些需要使用的库。在这种情况下,我们将使用NumPy库来进行矩阵运算和数学计算。

import numpy as np

接下来,我们定义一个神经网络的类。在这个类中,我们将定义网络的结构和一些基本方法,比如前向传播和反向传播。

class NeuralNetwork:
    def __init__(self, input_size, hidden_size, output_size):
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.output_size = output_size
        
        # 权重参数初始化
        self.W1 = np.random.randn(self.input_size, self.hidden_size)
        self.W2 = np.random.randn(self.hidden_size, self.output_size)
        
    def forward(self, X):
        # 前向传播
        self.z = np.dot(X, self.W1)
        self.z2 = self.sigmoid(self.z)
        self.z3 = np.dot(self.z2, self.W2)
        output = self.sigmoid(self.z3)
        return output
    
    def backward(self, X, y, output, learning_rate):
        # 反向传播
        self.output_error = y - output
        self.output_delta = self.output_error * self.sigmoid_prime(output)
        
        self.z2_error = self.output_delta.dot(self.W2.T)
        self.z2_delta = self.z2_error * self.sigmoid_prime(self.z2)
        
        self.W1 += X.T.dot(self.z2_delta) * learning_rate
        self.W2 += self.z2.T.dot(self.output_delta) * learning_rate
    
    def sigmoid(self, x):
        # Sigmoid激活函数
        return 1 / (1 + np.exp(-x))
    
    def sigmoid_prime(self, x):
        # Sigmoid函数的导数
        return x * (1 - x)

现在,我们可以使用这个神经网络类来创建一个实例,并使用一个简单的例子来测试它的性能。假设我们想要训练一个神经网络来对一些二进制数字进行预测。我们可以定义一个训练集,其中包含一些输入和对应的输出。

X = np.array([[0, 0],
              [0, 1],
              [1, 0],
              [1, 1]])

y = np.array([[0],
              [1],
              [1],
              [0]])

接下来,我们可以创建一个神经网络的实例,并使用这个训练集进行训练。

nn = NeuralNetwork(2, 3, 1)

for i in range(10000):
    output = nn.forward(X)
    nn.backward(X, y, output, 0.1)

现在,我们可以测试训练好的神经网络,看看它对新的输入做出什么样的预测。

# 预测输入[[0, 0]]
print(nn.forward([[0, 0]]))  # 输出:[[0.01485891]]

# 预测输入[[0, 1]]
print(nn.forward([[0, 1]]))  # 输出:[[0.98540083]]

# 预测输入[[1, 0]]
print(nn.forward([[1, 0]]))  # 输出:[[0.9860606]]

# 预测输入[[1, 1]]
print(nn.forward([[1, 1]]))  # 输出:[[0.01574538]]

通过这个简单的例子,我们可以看到我们从头开始创建的神经网络能够成功地进行预测。当然,这只是一个简单的神经网络,还有很多可以改进和优化的地方。但是,它向我们展示了如何使用Python编程创建一个神经网络,并使用一个例子来测试它的效果。