python人工智能算法之人工神经网络
作者:似曾相识2022
这篇文章主要为大家介绍了python人工智能算法之人工神经网络示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
人工神经网络
(Artificial Neural Network,ANN)是一种模仿生物神经网络的结构和功能的数学模型,其目的是通过学习和训练,在处理未知的输入数据时能够进行复杂的非线性映射关系,实现自适应的智能决策。可以说,ANN是人工智能算法中最基础、最核心的一种算法。
ANN模型的基本结构包含输入层、隐藏层和输出层。输入层接收输入数据,隐藏层负责对数据进行多层次、高维度的变换和处理,输出层对处理后的数据进行输出。ANN的训练过程是通过多次迭代,不断调整神经网络中各层的权重,从而使得神经网络能够对输入数据进行正确的预测和分类。
人工神经网络算法示例
接下来看看一个简单的人工神经网络算法示例:
import numpy as np class NeuralNetwork(): def __init__(self, layers): """ layers: 数组,包含每个层的神经元数量,例如 [2, 3, 1] 表示 3 层神经网络,第一层 2 个神经元,第二层 3 个神经元,第三层 1 个神经元。 weights: 数组,包含每个连接的权重矩阵,默认值随机生成。 biases: 数组,包含每个层的偏差值,默认值为 0。 """ self.layers = layers self.weights = [np.random.randn(a, b) for a, b in zip(layers[1:], layers[:-1])] self.biases = [np.zeros((a, 1)) for a in layers[1:]] def sigmoid(self, z): """Sigmoid 激活函数.""" return 1 / (1 + np.exp(-z)) def forward_propagation(self, a): """前向传播.""" for w, b in zip(self.weights, self.biases): z = np.dot(w, a) + b a = self.sigmoid(z) return a def backward_propagation(self, x, y): """反向传播.""" nabla_w = [np.zeros(w.shape) for w in self.weights] nabla_b = [np.zeros(b.shape) for b in self.biases] a = x activations = [x] zs = [] for w, b in zip(self.weights, self.biases): z = np.dot(w, a) + b zs.append(z) a = self.sigmoid(z) activations.append(a) delta = self.cost_derivative(activations[-1], y) * self.sigmoid_prime(zs[-1]) nabla_b[-1] = delta nabla_w[-1] = np.dot(delta, activations[-2].transpose()) for l in range(2, len(self.layers)): z = zs[-l] sp = self.sigmoid_prime(z) delta = np.dot(self.weights[-l+1].transpose(), delta) * sp nabla_b[-l] = delta nabla_w[-l] = np.dot(delta, activations[-l-1].transpose()) return (nabla_w, nabla_b) def train(self, x_train, y_train, epochs, learning_rate): """训练网络.""" for epoch in range(epochs): nabla_w = [np.zeros(w.shape) for w in self.weights] nabla_b = [np.zeros(b.shape) for b in self.biases] for x, y in zip(x_train, y_train): delta_nabla_w, delta_nabla_b = self.backward_propagation(np.array([x]).transpose(), np.array([y]).transpose()) nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)] nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)] self.weights = [w-(learning_rate/len(x_train))*nw for w, nw in zip(self.weights, nabla_w)] self.biases = [b-(learning_rate/len(x_train))*nb for b, nb in zip(self.biases, nabla_b)] def predict(self, x_test): """预测.""" y_predictions = [] for x in x_test: y_predictions.append(self.forward_propagation(np.array([x]).transpose())[0][0]) return y_predictions def cost_derivative(self, output_activations, y): """损失函数的导数.""" return output_activations - y def sigmoid_prime(self, z): """Sigmoid 函数的导数.""" return self.sigmoid(z) * (1 - self.sigmoid(z))
使用以下代码示例来实例化和使用这个简单的神经网络类:
x_train = [[0, 0], [1, 0], [0, 1], [1, 1]] y_train = [0, 1, 1, 0] # 创建神经网络 nn = NeuralNetwork([2, 3, 1]) # 训练神经网络 nn.train(x_train, y_train, 10000, 0.1) # 测试神经网络 x_test = [[0, 0], [1, 0], [0, 1], [1, 1]] y_test = [0, 1, 1, 0] y_predictions = nn.predict(x_test) print("Predictions:", y_predictions) print("Actual:", y_test)
输出结果:
Predictions: [0.011602156431658403, 0.9852717774725432, 0.9839448924887225, 0.020026540429992387]
Actual: [0, 1, 1, 0]
总结:
优点:
- 非线性能力强:ANN能够处理非线性关系,能够识别和预测非线性关系的数据,如图像和语音等数据
- 自适应性高:ANN能够自动学习数据特征并进行调整,能够适应环境的变化
- 学习能力强:ANN能够通过对大量数据的学习,对未知数据进行预测和分类
- 可并行化处理:ANN的计算过程可以并行处理,能够在短时间内处理大量数据
- 误差容忍度高:ANN在计算中允许存在一定的误差,可容忍部分数据的失真和丢失
缺点:
- 数据需求量大:为了提高预测和分类准确性,ANN需要大量数据进行学习和训练,如果数据量不足,预测和分类准确性将下降
- 计算量大:ANN的计算量很大,需要强大的计算设备进行处理
- 参数设置难度大:ANN的每个层级有多个参数,根据不同的数据需求,需要设置不同的参数,选择最优参数需要进行大量的试验和测试
- 可解释性差:由于其内部结构非常复杂,ANN的结果难以解释,难以知道决策是如何得出的
- 过拟合现象:为了达到高精度,ANN有可能会依赖于过于细节的特征,导致对新数据的泛化性能降低
目前,人工神经网络在图像识别、语音识别、自然语言处理、机器翻译等领域取得了重要的应用成果。作为一种高度灵活、强大的人工智能算法,ANN在未来的发展中具有广阔的应用前景。好了,关于人工神经网络就简单介绍到这里,希望对大家有所帮助!
以上就是python人工智能算法之人工神经网络的详细内容,更多关于python人工智能算法神经网络的资料请关注脚本之家其它相关文章!