快速学会一个算法,神经网络!!
神经网络的结构
输入层
输入层负责接收原始数据。 每个输入单元(神经元)对应一个输入特征,例如图像的每个像素点。 隐藏层
隐藏层位于输入层和输出层之间,负责对输入数据进行非线性变换和特征提取。 一个神经网络可以包含一个或多个隐藏层。 隐藏层中的每个神经元接收前一层神经元的加权输入,并通过激活函数进行处理。 输出层
输出层生成神经网络的最终输出,每个输出单元对应一个预测结果,例如分类问题中的类别标签。
神经网络的基本原理
加权求和
每个神经元接收前一层神经元传来的输入信号,并与各自的权重相乘,然后求和。 这个过程可以用一个简单的数学公式表示: 其中, 是输入, 是对应的权重, 是偏置项, 是加权求和的结果。 激活函数
为了引入非线性特性,加权求和后的结果 z 会通过一个激活函数进行处理。 常用的激活函数包括:
Sigmoid 函数,将输入值映射到0和1之间 公式为:
Tanh 函数,将输入值映射到-1和1之间 公式为:
ReLU 函数 公式为:
前向传播
损失函数
反向传播和梯度下降
为了最小化损失函数的值,神经网络通过反向传播(backpropagation)算法来更新权重。
反向传播算法利用链式法则计算每个权重对损失函数的梯度,然后使用梯度下降法更新权重,以不断减少预测误差。
案例分享
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
# 加载 MNIST 数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = x_train.reshape((x_train.shape[0], 28 * 28)).astype('float32') / 255
x_test = x_test.reshape((x_test.shape[0], 28 * 28)).astype('float32') / 255
# 将标签转换为 one-hot 编码
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
# 构建神经网络模型
model = models.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(28 * 28,)))
model.add(layers.Dense(10, activation='softmax'))
# 编译模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=128, validation_split=0.2)
# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test accuracy: {test_acc:.4f}")
# 预测示例
predictions = model.predict(x_test)
print(f"Prediction for the first test image: {predictions[0].argmax()}")
最后
—
「进群方式:加我微信,备注 “python”」
往期回顾
Fashion-MNIST 服装图片分类-Pytorch实现