数据集:ImageNet数据集
Keras库是用于深度卷积神经网络常用的库
基础概念(未了解)
- 张量
- 张量运算
- 微分
- 梯度下降
基础知识:
分类问题中的某个类别叫做类,数据点叫做样本,某个样本对应的类叫做标签
张量
张量:数字的容器,张量的维度叫做轴
标量(0D张量):仅包含一个数字的张量叫做标量,如:3,5
向量(1D张量):一位数组叫做向量(vector)或称为一维张量
矩阵(2D张量):即二维数组张量的三个关键属性:
- 轴的个数:3D张量3个轴,矩阵2个轴
- 形状:如矩阵形状为(3,5),表示3*5的二维数组
- 数据类型
张量的广播
如果将两个形状不同的张量相加,较小的张量会被广播,以匹配较大的张量- 向较小的张量添加轴(广播轴),使其ndim与较大的张量想同
- 沿轴将较小张量重复,使得形状想同
层
层是一个数据处理模块,将输入的张量转换成一个活多个输出张量
不同张量格式与不同数据处理类型需要不同的层:
构建深度模型就是将相互兼容的多个层拼接在一起,以建立有用的数据变换流程- 简单向量数据保存再2D张量中,通常用密集连接层即全连接层(dense layer),对应keras中的Dense类
- 序列数据保存在3D张量中,通常用循环层,keras中的LSTM层
- 图像数据保存再4D张量中,通常用二维卷积层,keras中的Conv2D
深度学习模型是层构成的有向无环图
选择目标函数来使损失尽可能最小化是有一些指导原则的:
- 对于二分类问题可以使用二元交叉熵损失函数
- 多分类问题可以使用分类交叉熵损失函数
- 回归问题可以用均方误差损失函数
- 序列学习可以用联结主义时序分类损失函数
回归问题是机器学习中常见的一类问题,它主要是预测一个连续值而不是离散的标签,比如预测气温等
Dense层(密集连接层)和Conv2D层(卷积层)的根本区别:
- Dense学到: 全局模式即涉及所有像素的模式
- Conv2D学到:局部模式即输入图像的二维小窗口发现的模式,如3x3小窗口,俗化讲就是从整体图像的不同局部获取到的信息
- Conv2D学到的具有以下几个性质:
- 平移不变性(从局部学到后可以在任何地方识别这个模式)
- 模式的空间层次结构:第一层卷积学到较小的局部模式,第二次卷积学到由第一层学习组合而成的更大模式,以此类推,就像堆积木一样
未知概念,需要查阅
- 网络拓扑结构:
- 双分支网络
- 多头网络
- Inception模块
- sdd
有效经验
- 样本少则应该使用小网络,训练样本少,过拟合会越严重,较小的网络可以降低过拟合。
数据标准化:
标准化是对数据进行清洗,为什么要清洗?因为很可能不同特征值差异很大,有的在01波动,有的在1001000波动,这种差异很大的特征值会非常影响训练效果。
具体方法:

学习手写数字识别
目标:使用python的keras库来完成手写数字分类
1. 将手写数字的灰度图像(28 像素×28 像素)划分到 10 个类别中(0~9)
2. 使用MNIST 数据集(60000 张训练图像 和 10000 张测试图像)
准备阶段:
下载数据集
安装keras库
实践:
1. 安装keras库:
python -m pip install keras
2. 下载数据集
from torchvision import datasets
train_data = datasets.MNIST(root='./', train=True, download=True)
test_data = datasets.MNIST(root='./', train=False, download=True)
3. 加载本地数据
import numpy as np
from keras.utils import np_utils
import gzip
import os
# Define file paths
train_images_path = './mnist_data/train-images-idx3-ubyte.gz'
train_labels_path = './mnist_data/train-labels-idx1-ubyte.gz'
test_images_path = './mnist_data/t10k-images-idx3-ubyte.gz'
test_labels_path = './mnist_data/t10k-labels-idx1-ubyte.gz'
def load_mnist_images(file_path):
with gzip.open(file_path, 'rb') as f:
# Skip the magic number and dimensions
f.read(16)
# Read the image data
images = np.frombuffer(f.read(), dtype=np.uint8).astype(np.float32)
images = images.reshape(-1, 28, 28)
images /= 255.0 # Normalize to [0, 1]
return images
def load_mnist_labels(file_path):
with gzip.open(file_path, 'rb') as f:
# Skip the magic number
f.read(8)
# Read the label data
labels = np.frombuffer(f.read(), dtype=np.uint8)
return labels
# Load data
train_images = load_mnist_images(train_images_path)
train_labels = load_mnist_labels(train_labels_path)
test_images = load_mnist_images(test_images_path)
test_labels = load_mnist_labels(test_labels_path)
# Convert labels to one-hot encoding
train_labels = np_utils.to_categorical(train_labels, 10)
test_labels = np_utils.to_categorical(test_labels, 10)
print(f"Training data shape: {train_images.shape}")
print(f"Training labels shape: {train_labels.shape}")
print(f"Training labels labels: {train_labels}")
print(f"Test data shape: {test_images.shape}")
print(f"Test labels shape: {test_labels.shape}")
4. 开始训练
- 将训练数据输入到神经网络
- 网络学习,关联图像和标签
- 对测试集生成预测,人工验证预测是否准确
作者:admin 创建时间:2024-07-30 15:52
最后编辑:admin 更新时间:2024-11-14 09:20
最后编辑:admin 更新时间:2024-11-14 09:20