大家好,我是小寒。
今天给大家介绍一个超强的算法模型,神经网络。
神经网络是一种由大量简单、相互连接的单元(称为“神经元”)组成的计算模型,受到人脑结构的启发。
每个神经元可以接收输入,对其进行处理,并产生输出。这些神经元通过称为 “权重” 的参数相互连接,权重决定了一个神经元的输出如何影响另一个神经元的激活状态。
图片
神经网络的组成部分
神经元
神经元是神经网络的基本单元,每个神经元接收输入,对输入进行加权求和,再通过一个激活函数生成输出。
层
图片
- 输入层:是网络接收外部数据的第一层,每个输入代表不同的特征。
- 隐藏层:网络中一个或多个中间层,这里进行数据的转换和特征的抽象。
- 输出层:网络的最后一层,负责产生输出,如分类的标签或者回归问题的数值预测。
权重和偏置
- 权重:连接网络中神经元的参数,决定了输入信号在网络中传递的强度和影响。
- 偏置:一种特殊的权重,与每层的每个神经元关联,可以调整激活函数的输入,从而控制神经元的激活方式。
激活函数
- 激活函数为网络引入非线性,使其能够捕捉复杂的模式。
- 常见的激活函数包括 Sigmoid、Tanh、ReLU、Leaky ReLU和SELU。
优化器(Optimizer)
优化器用于更新网络的权重和偏置,目的是减少预测输出和实际输出之间的误差。
常用的优化算法包括梯度下降、随机梯度下降(SGD)、Adam等。
损失函数(Loss Function)
损失函数衡量网络预测结果与实际结果的差异,是训练过程中优化的目标。
常见的损失函数有均方误差(MSE)、交叉熵损失等。
建立你的第一个神经网络
让我们为一个非常基本的数据集创建一个简单的神经网络。
我们将使用 sklearn.datasets 的 make_classification 函数来生成合成的二元分类数据集。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import tensorflow as tf
from tensorflow.keras import layers, models
X, y = make_classification(n_samples=1000, n_features=2, n_classes=2, n_clusters_per_class=1, n_redundant=0, random_state=42)
接下来,将数据集拆分为训练集和测试集。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
然后我们定义一个神经网络模型并训练。
model = models.Sequential()
model.add(layers.Dense(units=1, activatinotallow='sigmoid', input_shape=(2,)))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2)
最后,我们在测试集上评估模型。
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print(f'Test Accuracy: {test_accuracy * 100:.2f}%')